C++中字符串字面值的类型是什么?

16
例如,字符串字面值"Hello"的类型是什么?它是const char[6]还是const char*

13
"const char[6]" 翻译成中文是 "常量字符数组[6]"。 - juanchopanza
1
你说的“type”是什么意思? - nabroyan
1
在C++中,每个值都有一个类型。OP想知道字符串字面量的类型。 - user529758
1
@H2CO3 我知道,但他在回答中正确地回答了他的问题,所以我认为他的意思是别的什么。 - nabroyan
@nabroyan 你为什么认为OP回答了自己的问题? - Kröw
2个回答

20

字符串字面量 "Hello" 的类型为“长度为6的const char数组”。

普通字符串字面量和UTF-8字符串字面量也被称为窄字符串字面量。一个窄字符串字面量的类型为“长度为nconst char数组”,其中n是字符串的大小[...]。

但是,它可以通过数组到指针的转换转换为const char*。数组到指针的转换会导致指向数组第一个元素的指针。


1
@user1042389 数组转指针后得到的指针是一个临时对象。你正在返回对该对象的引用,因此该引用会悬空。 - Joseph Mansfield
1
@user1042389 这个**引用(reference)**是临时的。 - user529758
1
@user1042389 数组 存在于静态内存中。从数组到指针的转换得到的指针是临时的。就像你有一个 int x; 并且执行 (float)x - 转换后的 float 是临时的一样。 - Joseph Mansfield
@user1042389 为了使你的示例类似,请尝试使用 const int& f() { static long i = 0; return static_cast<int>( i ); } - Slava
为什么这段代码 const char* const& f() { return static_cast<const char*>("hello"); } 会出现警告? - Belloc
显示剩余4条评论

5
标准将其定义为“n个const char的数组”,因此它是const char[n](n是字符串的大小,包括终止的NUL字节)。
第7节,§2.14.15:
狭窄的字符串文字具有类型“n个const char的数组”,其中n是下面定义的字符串的大小,并具有静态存储期。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接