出于好奇,我想知道C++字符串文字的真正底层类型是什么。
根据我观察到的情况,我得到了不同的结果。
类似于以下类型的测试:
std::cout << typeid("test").name() << std::endl;给我看char const[5]。
试图将字符串文本分配给如下不兼容类型(以查看给定的错误):
wchar_t* s = "hello";我是从VS12 12的IntelliSense上得到的。
但我看不出这怎么可能是const char *,因为VS12接受了下面一行:
char* s = "Hello";我已经读到,在预置C ++11标准中,这是允许的,因为它是为了与C的追溯兼容性,尽管修改s会导致未定义的行为。我假设这只是VS12,还没有实现所有的C++11标准,这行通常会导致错误。
阅读C99标准(从这里开始,6.4.5.5)表明它应该是一个数组:
然后使用多字节字符序列初始化,一个具有静态存储持续时间和长度的数组,只需fi就可以包含该序列。
那么,,C++字符串文本下面的类型是什么?
非常感谢你宝贵的时间。
发布于 2013-08-24 21:18:56
字符串文本的类型确实是const char[SIZE],其中SIZE是字符串的长度加上null终止字符。
您有时看到const char*的原因是通常的数组到指针的衰减。
但我看不出这怎么可能是
const char *,因为VS12接受了下面一行:char* s = "Hello";
这在C++03中是正确的行为(作为通常的const-正确性规则的一个例外),但是从那以后它就被废弃了。兼容C++11的编译器不应接受该代码。
发布于 2013-08-24 21:19:17
字符串文本的类型为char const[N],其中N是包含终止空字符在内的字符数。虽然这种类型不会将而不是转换为char*,但C++标准包含一个子句,允许将字符串文本赋值给char*。添加此子句是为了支持兼容性,特别是对于当时没有const的C代码。
标准中的类型的相关条款是2.14.5 lex.string第8段:
普通字符串文字和UTF-8字符串文字也称为窄字符串文字。窄字符串文字具有“n const char数组”类型,其中n是下面定义的字符串的大小,并且具有静态存储时间(3.7)。
发布于 2013-08-24 21:21:27
首先,C++字符串文本的类型是n const char数组。其次,如果要用字符串文字初始化wchar_t,则必须编写以下代码:
wchar_t* s = L"hello"https://stackoverflow.com/questions/18423201
复制相似问题