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