【问题标题】:What happens when assigning a string literal to a member const char* variable from within a constructor in C++?在 C++ 的构造函数中将字符串文字分配给成员 const char* 变量时会发生什么?
【发布时间】:2018-02-08 20:07:05
【问题描述】:

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

如果我有以下代码:

class Foo {
    const char *some_string;

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

这有效吗?

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

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

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

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

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

【问题讨论】:

标签: c++ string constructor scope literals


【解决方案1】:

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

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

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

【讨论】:

  • 完美。所以其他答案是正确的。谢谢!只要我能接受答案,我就会:)
猜你喜欢
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
相关资源
最近更新 更多