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个数组constchar”。

普通字符串文字和 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++ 中字符串文字的类型是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

字符串文字中的符号 \0 是啥意思?

为啥允许将字符串文字分配给 C++ 中 char * 类型的指针 [重复]

C/C++,你能#include一个文件到一个字符串文字中吗? [复制]

arduino中char item是啥意思

从 int|double 到 string 的转换的简洁 C++ 习语是啥? [复制]

C#中变量名前的@符号是啥意思? [复制]