指向字面量的指针?

4
阅读《C++ Primer》时,我遇到了这样一行代码:
const char *cp = "Hello World"; 据我理解,"Hello World" 是一个字符串字面值,它是一个常量字符数组。由于数组退化成数组的第一个元素的指针,这是否意味着cp指向的是字面值H?但是,指针必须指向内存中对象的地址,因此是否不可能有指向字面值的指针?

2
为什么你认为"Hello World"不在内存中?我试图找到这个...“字符串字面值具有静态存储期,因此在程序的生命周期内存在于内存中。”来源:https://en.cppreference.com/w/cpp/language/string_literal - Richard Critten
根据stackexchange的说法,文字常量不占用任何内存。@RichardCritten - Bomas
6
简单回答:字面量的种类不同,包括整数和字符串。我会尝试用通俗易懂的语言回答,并保持原意不变。 - Richard Critten
1个回答

4
布尔、整数、浮点、字符和nullptr等字面值类型的存储类型未指定,因此它们不需要在内存中具有存储位置。
字面字符串类型的存储类型是指定的: " ... 字符串文字具有静态存储期,因此在程序的生命周期内存在于内存中。"来源:https://en.cppreference.com/w/cpp/language/string_literal 因此,字面字符串的地址可以被取出并存储在一个const char *中。
正如@MichaelKenzel所建议的:
从C++17草案标准(n4659) https://timsong-cpp.github.io/cppwp/n4659/lex.string#16 评估一个字符串字面量将导致一个带有静态存储期的字符串字面量对象,以上述方式从给定字符初始化。所有字符串字面量是否都不同(即,存储在不重叠的对象中)以及连续评估字符串字面量产生相同还是不同的对象是不确定的。[注意:尝试修改字符串文字的效果是未定义的。—结束注释]

我建议在C++17草案的相应段落中添加链接:https://timsong-cpp.github.io/cppwp/n4659/lex.string#16 - Michael Kenzel

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