你能做到吗?
char* func()
{
char * c = "String";
return c;
}
这里的“String”是编译器全局分配的数据吗?
最佳答案
你可以做到。但更正确的说法是:
const char* func(){
return "String";
}
C++ 规范规定字符串字面量被赋予静态存储持续时间。我无法链接到它,因为在线的 c++ 规范版本很少。 本页 const correctness是我能找到的最佳引用。
ISO/IEC 14882(编程语言 - C++)第 2.13.4 节说:
字符串字面量是一个字符序列(如 2.13.2 中所定义),用双引号括起来,可选 以字母 L 开头,如“...”或 L“...”。不以 L 开头的字符串文字是普通的 字符串文字,也称为窄字符串文字。一个普通的字符串字面量的类型是“array of n const char” 和静态存储持续时间 (3.7),其中 n 是如下定义的字符串的大小,并且是 用给定的字符初始化。 ...
是否所有字符串文字都是不同的(即,存储在非重叠对象中)是实现定义的。 尝试修改字符串文字的效果是不确定的。
关于c++ - 将 char* 返回为字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3556976/