出于好奇,我想知道 C++ 字符串文字的真正底层类型是什么。
根据我的观察,我得到不同的结果。
typeid 测试如下:
std::cout << typeid("test").name() << std::endl;
给我看char const[5]
。
尝试将字符串文字分配给这样的不兼容类型(查看给定的错误):
wchar_t* s = "hello";
我a value of type "const char *" cannot be used to initialize an entity of type "wchar_t *"
从 VS12 的 IntelliSense 获得。
但我不明白它会如何,const char *
因为 VS12 接受了以下行:
char* s = "Hello";
我已经读过这在 C++11 之前的标准中是允许的,因为它是为了与 C 进行追溯兼容,尽管修改s
会导致未定义的行为。我假设这只是 VS12 尚未实现所有 C++11 标准,并且这一行通常会导致错误。
阅读 C99 标准(从这里,6.4.5.5)表明它应该是一个数组:
然后使用多字节字符序列来初始化一个静态存储持续时间和长度刚好足以包含该序列的数组。
那么,C++ 字符串文字下面的类型是什么?
非常感谢您宝贵的时间。