我看到了下面的代码:
template <class T>
class Type {
public:
Type() {}
T& operator=(const T& rhs) {value() = rhs; return value();}
T& value() {return m_value;}
T value() const {return m_value;}
private:
T m_value;
};
为什么编译器不报错
T& value() {return m_value;}
T value() const {return m_value;}
以及如何知道调用了哪一个?
最佳答案
这两个函数其实是不一样的。只有第二个函数被声明为 const
成员函数。如果从中调用成员的对象是 const
,则使用后一个选项。如果对象是非 const
,则使用第一个选项。
例子:
void any_func(const Type *t)
{
something = t->value(); //second `const` version used
}
void any_func2(Type *t)
{
something = t->value(); //first non-`const` version used
}
如果两个函数都被声明为非const
,或者都被声明为const
,编译器会(无论如何应该)提示。
关于C++ 相同的方法签名但不同的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33264017/