' INT'和' double'转换功能是明确的'并在此代码中为什么我允许使用此转换而不是错误消息? 如果我删除了所有转换过载功能代码,则会发生转换错误'
class Person
{
public:
Person(string s = "", int age = 0) :Name(s), Age(age) {}
operator string() const { return Name; }
explicit operator int() const{ return 10; } // ! Explicit
explicit operator double()const { return 20; } //! Explicit
operator bool()const { if (Name != "") return true; return false; } // using this
};
int main(){
Person a;
int z = a;
std::cout << z << std::endl; // Why print "1"? Why uses bool conversion?
}
我这是答案:
因为&#39; a&#39;不能转换为int或double它发生错误,但因为它有bool转换函数,可以转换为int和int转换为double,代码使用此函数。
答案 0 :(得分:2)
我更正了所有示例代码错误和遗漏。
我将输出添加到隐式operator bool()
以使其调用显而易见。
请参阅coliru:http://coliru.stacked-crooked.com/a/99f4a5a9173a52a8
int z = a;
上面的行调用了隐式的bool-conversion-operator,因为这是你让它从Person
转到int
的唯一方法,它只需要一个用户定义的转换(最大值)允许的)。