将字符串文字从C ++中的构造函数中赋予成员const char *变量时会发生什么?

时间:2017-08-31 01:09:01

标签: c++ string constructor scope literals

我最近在这些方面看到了一些东西,经过相当多的搜索后,我找不到直接解决这个问题的答案。

如果我有以下代码:

class Foo {
    const char *some_string;

    Foo()
    {
        some_string = "StringLiteral";
    }
};

这有效吗?

源代码非常有信誉,所以我最好的猜测是这是可接受的,并且定义了行为。

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

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

但是,就像我说的那样,我看到的所有答案都没有直接引用直接从函数本身分配的字符串文字。

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

1 个答案:

答案 0 :(得分:3)

  

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

是的,它有效。因为string literals具有静态存储持续时间,无论它出现在何处(在函数体内还是没有)。

  

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