字串文字匹配布林重載而不是std::string
考慮以下C 程式碼:
<code class="cpp">class Output { public: static void Print(bool value) { std::cout << (value ? "True" : "False"); } static void Print(std::string value) { std::cout << value; } };</code>
當如下呼叫該方法時:
<code class="cpp">Output::Print("Hello World");</code>
您可能會驚訝地看到輸出:
True
為什麼呼叫Print 方法的布林重載而不是std: :字串重載?
理解轉換機制
C 中的字串文字,例如“Hello World”,儲存為 const 字元陣列。但是,它們可以隱式轉換為指向 const 字元的指針,然後可以將其轉換為 bool。
在提供的程式碼中,編譯器更喜歡從「Hello World」到 bool 的標準轉換序列,而不是使用者-定義從「Hello World」到 std::string 的轉換序列。此首選項基於 C 標準,該標準規定標準轉換序列優先於使用者定義的轉換序列。
解決問題
確保std ::string 重載被調用,明確傳遞一個std::string 參數:
<code class="cpp">Output::Print(std::string("Hello World"));</code>
這樣做,你強制編譯器使用std::string 重載,這將正確輸出“Hello World” .
以上是為什麼我的 C 代碼會列印“True”而不是“Hello World”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!