通过隐式转换为字符串流式传输对象时重载解析失败
问题描述
隐式通常不鼓励转换为字符串,建议使用重载用户定义类型的输出运算符 (
请考虑以下示例:
<code class="cpp">struct NameType { operator std::string() { return "wobble"; } }; struct Person { NameType name; }; int main() { std::cout << "bobble"; std::cout << "wibble"; Person p; std::cout << p.name; }</code>
错误消息
使用 GCC 4.3.4 编译此代码会产生以下错误:
prog.cpp: In function ‘int main()’: prog.cpp:18: error: no match for ‘operator<<’ in ‘std::cout << p.Person::name’
根本原因
由于以下组合,重载集不包含所需的重载因素:
ADL 限制
参数相关查找(ADL)不直接涉及此问题。 ADL 是编译时功能,在编译器解析函数调用时应用。在这种情况下,编译器会执行到字符串的隐式转换,而不涉及任何函数调用。
以上是为什么流式传输隐式转换为字符串的对象会导致重载解析失败?的详细内容。更多信息请关注PHP中文网其他相关文章!