我有一个类,它看起来是这样的:麻烦与常量/非const重载
class ClassA
{
public:
float Get(int num) const;
protected:
float& Get(int num);
}
类之外,我调用get()函数。
float foo = classAInstance.Get(i);
我希望这个叫公版,而是Visual Studio中出现了错误:
error C2248: 'ClassA::Get' : cannot access protected member declared in class 'ClassA'
当注释掉保护过载和删除所有引用的代码编译。
为什么编译器会在可访问的成员可用时尝试使用不可访问的成员?有没有一种可以接受的方式来强制编译器选择正确的重载?是否有对成员函数解析规则的引用?
这个例子看起来很危险。给定'string func();'和'Blah b(func())'的表达式将会被编译,并且仍然会导致一个悬挂引用。我的规则是:*从不*保留'const&'参数。你说什么? – 2014-03-07 08:01:05
@MartinBa:当然你也希望'Blah(string &&)= delete;' – 2014-03-07 14:08:27
嗯。然后问题就变成了是否仍然需要'const char'overload。 'char *'参数会绑定到'string const&'版本还是'string &&'版本? :-) – 2014-03-07 14:18:36