cast operator - const vs non-const

时间:2010-02-24 10:13:02

标签: c++ casting operator-overloading const

我有这个代码示例:

class Number 
{ 
  int i;
  public:
    Number(int i1): i(i1) {}
    operator int() const {return i;}
};

从投射操作符中删除const修饰符有什么含义? 它会影响自动投射吗?为什么?

3 个答案:

答案 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,它将开始给出编译错误。