首页 >后端开发 >C++ >为什么将 Person 对象隐式转换为字符串会导致重载解析失败?

为什么将 Person 对象隐式转换为字符串会导致重载解析失败?

Barbara Streisand
Barbara Streisand原创
2024-11-05 11:11:02572浏览

Why Does Implicit Conversion of a Person Object to a String Result in Overload Resolution Failure?

对象隐式转换为字符串期间重载解析失败

通常不鼓励隐式字符串转换,对 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn