const用户定义转换和非const有什么区别

  • 本文关键字:const 区别 用户 定义 转换 c++
  • 更新时间 :
  • 英文 :


所以,如果我有:

class test
{
public:
operator const int() {...}
operator int() {...}
};

为什么以下内容模糊不清?:

test a;
(const int) a;

我想要一个const int,这难道不是一个明确的演员阵容吗?

我也用类类型(不是内置类型)而不是int测试了这一点,它仍然不明确,但为什么呢?

如果有人能解释原因,我会非常高兴。

这些是不明确的。

operator const int() {...}l
operator int() {...}l

这是不明确的,因为返回类型并不是决定是否调用方法的部分,转换类型会忽略const,所以两个具有相同签名的方法将是模糊的。然而,像这个这样的不同签名

operator const int() const {...}
operator int() {...}

不会有歧义,可用于区分const对象和非const对象之间的调用。此外,这也意味着第一个函数不会改变对象的";状态";因此对类的用户很有用,因为它告诉他们操作不会更改对象(除了mutable成员,这有时对缓存状态很有用)

请注意@user4581301的评论,即很少有理由声明返回类型const。它将获得分配给const与否的类型。但这并不适用于参考回报。

正如其他方法所指出的,与其他方法不同,Conversion运算符包含转换类型。但是const被忽略了,所以以下内容不会含糊不清:

operator double() {...}
operator int() {...}

相关内容

  • 没有找到相关文章

最新更新