【问题标题】:casting operator - const vs non-const强制转换运算符 - const 与非 const
【发布时间】:2011-01-20 11:22:05
【问题描述】:

我有这个代码示例:

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

从转换运算符中删除 const 修饰符有什么影响? 它会影响自动投射吗?为什么?

【问题讨论】:

    标签: c++ casting operator-overloading constants


    【解决方案1】:

    如果转换运算符不是 const,则不能转换 const 对象:

    const Number n(5);
    int x = n; // error: cannot call non-const conversion operator
    

    【讨论】:

    • +1 - 赚得盆满钵满。嗯 - 我想转换从 const 对象获取的值,但我不能,因为转换(即不修改源值)不是 const。停下来,看看和思考,推理是显而易见的——它与任何其他方法没有什么不同。但我仍然不断听到暮光之城的主题。源的(至少是逻辑的)常量是该方法预期行为的一部分——“转换”是什么意思。但话又说回来,一致的规则至少是一致的。
    【解决方案2】:

    如果你有这样的功能:

    void f(const Number& n)
    {
      int n1 = n;
    }
    

    如果你在强制转换操作符中删除 const,它将开始给出编译错误。

    【讨论】:

      【解决方案3】:

      无论class Number 实例是否为const,都可以调用const 版本。如果操作符被声明为非常量,它只能在非常量实体上调用——当你试图在不能被调用的地方隐式使用它时,你会得到一个编译错误。

      【讨论】:

      • 您的意思是“仅在 non-const 实体上调用”??
      • @legends2k:是的,已修复。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 2013-10-20
      • 1970-01-01
      • 2011-11-10
      • 2020-12-23
      • 1970-01-01
      • 2015-01-17
      相关资源
      最近更新 更多