C++从布尔到字符串的隐式转换
C++ Implicit conversion from bool to string
我有以下代码,这些代码在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:在下面提供了"整数文本"的定义
整数文本是一个没有句点或指数部分的数字序列,带有可选的分隔单引号,在确定其值时会忽略这些引号。
相关文章:
- wcstombs_s(),转换字符串的长度
- 使用 CStringW/CStringA 和 CT2W/CT2A 转换字符串有什么区别?
- 无法转换字符串插入函数的参数
- 转换字符串向量:基于先前的值跳过元素
- 从中间器转换字符串不起作用,出了什么问题?
- 失败的证明转换字符串到枚举类
- 如何使用正则表达式和提升转换迭代器标记和转换 c 字符串
- 使用java jni时转换字符串类型
- 如何避免在转换字符串令牌流时重复istringstream构造
- 阿托伊未正确转换字符串
- C++,转换字符串,使连续下划线序列变为单个下划线
- 使用长算术转换字符串
- 转换字符串十进制数时的精度
- 将词法转换字符串提升为双精度
- 使用marshal_as函数转换字符串的性能
- C++不会从数据转换字符串
- 无论如何,在c++ /Qt中转换字符串到结构中的字段
- C++ 隐式类型转换字符串 -> int?
- 转换字符串到浮点数,c++实现
- 用于转换字符串大小写的函数