![](/img/trans.png)
[英]What happens when a string literal is passed to a function accepting a const std::string & in C++?
[英]What happens when assigning a string literal to a member const char* variable from within a constructor in C++?
我最近在这些方面看到了一些东西,经过大量搜索后,我没有找到直接解决此问题的答案。
如果我有以下代码:
class Foo {
const char *some_string;
Foo()
{
some_string = "StringLiteral";
}
};
这有效吗?
来源非常有名,所以我最好的猜测是这是可以接受的,并且定义了行为。
我的问题是,看起来像在使用字符串文字的内存应该在堆栈中分配,并且该内存在构造函数范围之外应该不再有效。
对此,我能得到的最佳答案是,编译器将字符串放入静态内存中,这意味着它在此函数范围之外仍然有效。
但是,就像我说的那样,我看到的所有答案都没有直接引用直接从函数内部分配的字符串文字。
那么,这有效吗? 又为什么呢?
那么,这有效吗? 又为什么呢?
是的,这是有效的。 因为字符串文字具有静态存储持续时间,所以无论它出现在什么地方(无论是否在函数体内)。
字符串文字具有静态的存储持续时间,因此在程序的生命周期内存在内存中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.