转换运算符作为独立函数

shu*_*ura 25 c++

为什么C++要求用户定义的转换运算符只能是非静态成员?为什么不允许像其他一元运算符一样使用独立函数?像这样的东西:

operator bool (const std::string& s) { return !s.empty(); }
Run Code Online (Sandbox Code Playgroud)

小智 9

我能想到的一个原因是防止将隐式转换应用于正在转换的事物.在你的例子中,如果你说:

 bool( "foo" );
Run Code Online (Sandbox Code Playgroud)

那么"foo"将被隐式转换为一个字符串,然后将你提供的显式bool转换应用于它.

如果bool运算符是成员函数,则无法执行此操作,因为不应用隐式转换*this.这大大减少了歧义的可能性 - 模糊性通常被视为"坏事".

  • **C++**中有一个`explicit`关键字. (2认同)