所以,如果我有:
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() {...}