C++从布尔到字符串的隐式转换

C++ Implicit conversion from bool to string

本文关键字:转换 字符串 布尔 C++      更新时间:2023-10-16

我有以下代码,这些代码在Visual C++2012中编译。

#include <string>
void func(std::string str)
{
}
void my_func()
{
    func(false);
}

布尔值"false"是传递到字符串构造函数的隐含值

string(const char* _Ptr)

然后指针为null(因为false=0)。为什么要编译它,它应该按照C++11标准编译吗?

MSVC错误地将false视为空指针常量。然而,根据N4140,§4.10[conv.ptr]/1(强调矿):

空指针常量是值为零的整数文本或std::nullptr_t类型的prvalue。空指针常量可以是转换为指针类型;结果是的空指针值该类型,并且可以与对象的其他值区分开来指针或函数指针类型。

措辞与C++11有所不同,您可以在这里找到讨论。那里的结论是,这也是C++11中的一个错误。

为了可见性,TartanLlama根据[lex.icon]/1:在下面提供了"整数文本"的定义

整数文本是一个没有句点或指数部分的数字序列,带有可选的分隔单引号,在确定其值时会忽略这些引号。