bool 函数重载中的字符串文字歧义
定义同时接受 bool 和 std::string 参数的重载方法时,开发人员可能会遇到提供字符串文字时出现意外行为。优先考虑 bool 重载,而不是调用 std::string 重载。
要理解此行为,请考虑以下情况:
<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; } }; Output::Print("Hello World");</code>
尽管提供了字符串文字,但 Print( ) 调用具有 bool 重载的方法。这是因为 C 中的字符串文字可以隐式转换为 bool 值。具体来说,“Hello World”是一个 const char* 数组,可以解释为指向 const char 的指针,而 const char 又可以隐式转换为 bool。此转换被视为标准转换序列。
C 优先考虑标准转换序列而不是用户定义的转换(例如,从 std::string 到 bool 的转换)。根据 C 标准 (§13.3.3.2/2),标准转换序列始终被认为是更好的转换序列。
可以通过向 Print( 显式提供 std::string 参数来更改此行为) 方法:
<code class="cpp">Output::Print(std::string("Hello World"));</code>
以上是为什么字符串文字会触发函数重载中的'bool”重载?的详细内容。更多信息请关注PHP中文网其他相关文章!