【发布时间】:2015-03-29 05:48:49
【问题描述】:
在这种情况下
void f(int *);
void f(const int *);
...
int i;
f(&i);
情况很清楚 - f(int *) 被调用,这似乎是正确的。
但是,如果我有这个(它是错误地这样做的(*)):
class aa
{
public:
operator bool() const;
operator char *();
};
void func(bool);
aa a;
func(a);
operator char *() 被调用。我无法弄清楚为什么这样的决策路径会比使用运算符 bool() 更好。有什么想法吗?
(*) 如果将 const 添加到第二个运算符,代码当然可以按预期工作。
【问题讨论】:
-
std::string的设计者有充分的理由让c_str()成为命名成员函数而不是转换运算符。 -
因为
operator char*();是一个非const的成员函数。 -
operator bool() { return const_cast<aa const&>(*this); }也修复了它。 -
不,抱歉,这将是一个糟糕的解决方案。
标签: c++ overloading language-lawyer conversion-operator const-method