首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++字符串文本的类型

C++字符串文本的类型
EN

Stack Overflow用户
提问于 2013-08-24 21:15:43
回答 3查看 2.1K关注 0票数 5

出于好奇,我想知道C++字符串文字的真正底层类型是什么。

根据我观察到的情况,我得到了不同的结果。

类似于以下类型的测试:

代码语言:javascript
复制
std::cout << typeid("test").name() << std::endl;

给我看char const[5]

试图将字符串文本分配给如下不兼容类型(以查看给定的错误):

代码语言:javascript
复制
wchar_t* s = "hello";

我是从VS12 12的IntelliSense上得到的。

但我看不出这怎么可能是const char *,因为VS12接受了下面一行:

代码语言:javascript
复制
char* s = "Hello";

我已经读到,在预置C ++11标准中,这是允许的,因为它是为了与C的追溯兼容性,尽管修改s会导致未定义的行为。我假设这只是VS12,还没有实现所有的C++11标准,这行通常会导致错误。

阅读C99标准(从这里开始,6.4.5.5)表明它应该是一个数组:

然后使用多字节字符序列初始化,一个具有静态存储持续时间和长度的数组,只需fi就可以包含该序列。

那么,,C++字符串文本下面的类型是什么?

非常感谢你宝贵的时间。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-24 21:18:56

字符串文本的类型确实是const char[SIZE],其中SIZE是字符串的长度加上null终止字符。

您有时看到const char*的原因是通常的数组到指针的衰减。

但我看不出这怎么可能是const char *,因为VS12接受了下面一行:char* s = "Hello";

这在C++03中是正确的行为(作为通常的const-正确性规则的一个例外),但是从那以后它就被废弃了。兼容C++11的编译器不应接受该代码。

票数 8
EN

Stack Overflow用户

发布于 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)。

票数 5
EN

Stack Overflow用户

发布于 2013-08-24 21:21:27

首先,C++字符串文本的类型是n const char数组。其次,如果要用字符串文字初始化wchar_t,则必须编写以下代码:

代码语言:javascript
复制
wchar_t* s = L"hello"
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18423201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档