出于好奇,我想知道 C++ 字符串字面值的真实底层类型。
根据我的观察,我得到了不同的结果。
类似以下的 typeid 测试:
std::cout << typeid("test").name() << std::endl;
请显示给我char const[5]
。
尝试将字符串字面值分配给不兼容的类型,如下所示(以查看给定的错误):
wchar_t* s = "hello";
我从VS12的智能感知中得到了一个值为“const char *”类型的值,无法用于初始化“wchar_t *”类型实体。
但我不明白它怎么可能是“const char *”,因为以下行在VS12中被接受:
char* s = "Hello";
我已经阅读过,这在C++11标准之前是允许的,因为它是为了与C进行兼容,尽管修改s将导致未定义的行为。 我认为这只是VS12尚未实现所有C++11标准,这一行通常会导致错误。
阅读C99标准(从这里,6.4.5.5)建议它应该是一个数组:
多字节字符序列然后用于初始化具有静态存储期和长度的数组,仅足以包含该序列。
那么,C ++字符串文字下面的类型是什么?
非常感谢您宝贵的时间。