为什么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.这大大减少了歧义的可能性 - 模糊性通常被视为"坏事".
| 归档时间: |
|
| 查看次数: |
6497 次 |
| 最近记录: |