通過隱式轉換為字符串流式傳輸對象時重載解析失敗
問題描述
隱式通常不鼓勵轉換為字串,建議使用重載使用者定義類型的輸出運算子(
請考慮以下範例:
<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中文網其他相關文章!