在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么

What happens when assigning a string literal to a member const char* variable from within a constructor in C++?

本文关键字:变量 char const 什么 成员 C++ 构造函数 分配 文本 字符串      更新时间:2023-10-16

我最近看到了一些类似的东西,经过大量搜索,我还没有找到直接解决这个问题的答案。

如果我有以下代码:

class Foo {
const char *some_string;
Foo()
{
some_string = "StringLiteral";
}
};

这个有效吗?

消息来源非常有信誉,所以我最好的猜测是,这是可以接受的,并且是明确的行为。

我的问题是,字符串文字使用的内存似乎应该是堆栈分配的,并且这个内存在构造函数的范围之外不应该再有效。

对此,我能得到的最好答案是编译器将字符串放在静态内存中,这意味着它在该函数的范围之外仍然有效。

然而,正如我所说,我看到的所有答案都没有直接引用直接从函数内部分配的字符串文字。

那么,这有效吗?为什么?

那么,这有效吗?为什么?

是的,它是有效的。因为字符串文字具有静态存储持续时间,无论它出现在哪里(是否在函数体中(。

字符串文字具有静态存储持续时间,因此在程序的整个生命周期中都存在于内存中。