C++ 中字符串文字的类型是啥? [复制]
Posted
技术标签:
【中文标题】C++ 中字符串文字的类型是啥? [复制]【英文标题】:What is the type of a string literal in C++? [duplicate]C++ 中字符串文字的类型是什么? [复制] 【发布时间】:2013-03-08 15:19:23 【问题描述】:例如,字符串文字“Hello”、const char[6]
或 const char*
的类型是什么?
【问题讨论】:
const char[6]
.
你说的“类型”是什么意思?
@nabroyan 在 C++ 中,每个值都有一个类型。 OP 想知道字符串文字的类型。
@H2CO3 我知道,但他在回答中正确回答了他的问题,所以我告诉他他的意思是别的
【参考方案1】:
字符串文字"Hello"
的类型是“6个数组const
char
”。
普通字符串文字和 UTF-8 字符串文字也称为窄字符串文字。窄字符串文字的类型为“array of n
const char
”,其中 n 是字符串的大小 [...]
但是,可以通过数组到指针的转换将其转换为const char*
。数组到指针的转换产生指向数组第一个元素的指针。
【讨论】:
这可能解释了为什么此代码在 VS2010 中针对此函数const char* const& f() return "hello";
显示警告 C4172 returning address of local variable or temporary
。你同意吗?
@user1042389 数组到指针转换产生的指针是一个临时对象。您正在返回对该对象的引用,因此该引用悬空。
临时的在哪里? “你好”存在于静态内存中!
@user1042389 对它的引用是临时的。
@user1042389 array 存在于静态内存中。我们从数组到指针的转换中得到的指针是临时的。就像如果你有一个 int x;
并做 (float)x
- 演员 float
是临时的。【参考方案2】:
标准将其定义为“n 的数组const char
”,所以它是const char[n]
(n 是字符串的大小,包括终止的 NUL 字节)。
第 7 节,第 2.14.15 节:
窄字符串文字的类型为“n const char 数组”,其中 n 是字符串的大小,定义如下,并且具有静态存储持续时间。
【讨论】:
以上是关于C++ 中字符串文字的类型是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥允许将字符串文字分配给 C++ 中 char * 类型的指针 [重复]
C/C++,你能#include一个文件到一个字符串文字中吗? [复制]