尝试使用隐式转换到字符串来流式传输对象时,可能会发生重载解析失败。下面的代码说明了这一点,它定义了一个隐式转换为字符串的结构体和一个将对象流式传输到标准输出的函数:
<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; }</code>
当使用 GCC 4.3.4 编译时,此代码生成以下错误:
prog.cpp:18: error: no match for ‘operator<<’ in ‘std::cout << p.Person::name’
出现此错误是因为重载集中未考虑自由函数运算符
C 98 标准部分 14.8.1/4 声明对函数参数执行隐式转换以将其转换仅当参数类型不包含参与模板实参推导的模板参数时,才转换为相应函数参数的类型。在这种情况下,所需重载的所有参数都包含参与模板参数推导的模板参数,因此它们都无法从隐式转换中获取其值。
因此,重载解析失败,并且报告错误。
以上是为什么在 C 中隐式转换为'std::string”时重载解析会失败?的详细内容。更多信息请关注PHP中文网其他相关文章!