【发布时间】:2012-10-26 15:11:00
【问题描述】:
以下行为的原因是什么?
class BoolWrapper
{
public:
BoolWrapper(bool value) : value(value) {}
operator bool() const { return value; }
operator int() const { return (int) value; }
private:
bool value;
};
BoolWrapper bw(true);
if (bw) { ... } // invokes operator bool()
if (bw == true) { ... } // invokes operator int() -- why?
这是预期的行为吗? (使用 GCC 4.7.2。)
【问题讨论】:
-
如果我不得不猜测我会在内置
==的上下文中说“整体促销”... -
因此你应该明确定义
bool operator==(bool); -
@ahenderson 那是非法的。用户定义的运算符必须至少有一个用户定义类型的参数。
-
@Gorpik 这听起来不对。我将运算符称为成员函数。您是否将运算符称为全局函数?这是一个link,它显示了外部和内部类定义。
-
@ahenderson 抱歉,我没有注意到您的
operator==收到一个参数,因此是一个成员函数。在这种情况下你是对的。