在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么
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";
}
};
这个有效吗?
消息来源非常有信誉,所以我最好的猜测是,这是可以接受的,并且是明确的行为。
我的问题是,字符串文字使用的内存似乎应该是堆栈分配的,并且这个内存在构造函数的范围之外不应该再有效。
对此,我能得到的最好答案是编译器将字符串放在静态内存中,这意味着它在该函数的范围之外仍然有效。
然而,正如我所说,我看到的所有答案都没有直接引用直接从函数内部分配的字符串文字。
那么,这有效吗?为什么?
那么,这有效吗?为什么?
是的,它是有效的。因为字符串文字具有静态存储持续时间,无论它出现在哪里(是否在函数体中(。
字符串文字具有静态存储持续时间,因此在程序的整个生命周期中都存在于内存中。
相关文章:
- 在C++中将变量 wstring 分配给 Char 数组
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 如何更好地检查两个 char 变量是否在一组值中?
- 将双精度值转换为 char 变量时字符串流如何工作
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- C++ 如何检查 char 变量是否未定义(未初始化)
- 如何将整数分配给 char 类型的变量
- 在 c++ 中将 Char 数组添加到 Char * 变量
- 如何正确地检查变量char中包含的字母
- char指针或char变量的默认值是多少
- 当对字符变量使用toupper()时,所述char变量输出多个字符.我该如何防止这种情况发生
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么
- 声明具有两种类型的变量:"int char"
- 程序的执行在 C++ 中输入 char 变量后结束
- 如何创建一个 char *[] 变量,以便将其传递给函数
- 如何初始化类的 char 成员变量?
- LLVM-如何将ConstantExpr转换为ConstantDataArray,以便打印全局变量char*的值
- C++如何将变量char数组从一个函数传递到另一个函数