2017-08-31 28 views
2

我最近看到了一些沿着这些线条的东西,经过相当多的搜索后,我还没有找到直接解决这个问题的答案。将C++中的构造函数中的字符串文字赋值给成员const char *变量时会发生什么?

如果我有以下代码:

class Foo { 
    const char *some_string; 

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

这是有效的?

该来源是相当有名的,所以我最好的猜测是,这是可以接受的,并定义的行为。

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

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

但是,正如我所说,我看到的所有答案都没有直接引用直接从函数内部赋值的字符串。

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

+3

http://en.cppreference.com/w/cpp/language/string_literal *“字符串文字具有静态存储持续时间,因此存在于程序生命的内存中。”* – jtbandes

回答

3

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

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

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

+0

完美。所以其他答案是正确的。谢谢!很快,我可以接受答案,我会:) – Gurgadurgen

相关问题