我有这个代码示例:
class Number
{
int i;
public:
Number(int i1): i(i1) {}
operator int() const {return i;}
};
从投射操作符中删除const
修饰符有什么含义?
它会影响自动投射吗?为什么?
答案 0 :(得分:28)
如果转换运算符不是const,则无法转换const对象:
const Number n(5);
int x = n; // error: cannot call non-const conversion operator
答案 1 :(得分:5)
无论const
实例是否为const,都可以调用class Number
版本。如果运算符被声明为非const,则只能在非const实体上调用 - 当您尝试隐式使用它时无法调用它将导致编译错误。
答案 2 :(得分:5)
如果你有这样的功能:
void f(const Number& n)
{
int n1 = n;
}
如果在转换操作符中删除const,它将开始给出编译错误。