通常不鼓励隐式字符串转换,对 Person 进行运算符重载是更合适的解决方案。但是,让我们检查以下代码来说明问题:
<code class="cpp">#include <string> #include <ostream> #include <iostream> struct NameType { operator std::string() { return "wobble"; } }; struct Person { NameType name; }; int main() { std::cout << std::string("bobble"); std::cout << "wibble"; Person p; std::cout << p.name; // Error occurs here }</code>
使用 GCC 4.3.4 时,代码编译没有错误,并给出输出:
<code class="Bash">bobble wibble</code>
但是,尝试使用
<code class="Bash">prog.cpp:18: error: no match for ‘operator<<’ in ‘std::cout << p.Person::name’</code>
在这种情况下,运算符
要纠正此问题,您应该定义一个显式运算符
以上是为什么将 Person 对象隐式转换为字符串会导致重载解析失败?的详细内容。更多信息请关注PHP中文网其他相关文章!