【发布时间】:2018-02-08 20:07:05
【问题描述】:
我最近看到了一些类似的东西,经过相当多的搜索后,我没有找到直接解决这个问题的答案。
如果我有以下代码:
class Foo {
const char *some_string;
Foo()
{
some_string = "StringLiteral";
}
};
这有效吗?
来源非常有名,所以我最好的猜测是这是可以接受的,并且是明确的行为。
我的问题是,使用字符串字面量的内存看起来应该是堆栈分配的,并且这个内存在构造函数的范围之外应该不再有效。
对此,我能得到的最佳答案是编译器将字符串放在静态内存中,这意味着它在此函数范围之外仍然有效。
但是,就像我说的那样,我看到的所有答案都没有直接引用直接从函数本身分配的字符串文字。
那么,这有效吗?为什么?
【问题讨论】:
-
en.cppreference.com/w/cpp/language/string_literal "字符串字面量具有静态存储持续时间,因此在程序的生命周期内都存在于内存中。"
标签: c++ string constructor scope literals