C++悬垂的绳子的寿命

C++ lifetime of a dangling string

本文关键字:C++      更新时间:2023-10-16

C中,你可以写

const char *result = "AB";

标准在C++中是否支持此样式?此常量字符串的生存期是否与指针的作用域相同?

文字字符串常量具有整个程序的生存期,并且存储字符串的数组永远不会超出范围。

请注意,C 和 C++ 中的文字字符串之间存在语义差异:C++文字字符串存储在常量字符数组中(因此需要const char*中的const)。在 C 中,它们不是常量数组(所以char *在 C 中没问题)。但是,不允许修改 C 中的文本字符串,这使它们只读(但不是常量)。

引用C++17,第§5.13.5章(强调我的)

普通字符串文本

和 UTF-8 字符串文本也称为窄字符串文本。狭窄的 字符串文本的类型为"N 常量字符数组",其中 n 是下面定义的字符串的大小,并且具有 静态存储持续时间

关于静态存储持续时间,第 § 6.7.1 章

所有没有动态存储持续时间

、没有线程存储持续时间的变量,并且 非本地具有静态存储持续时间。这些实体的存储应在 程序。

因此,字符串文字的生存期是程序的整个执行,它永远不会超出范围。

是否保证此常量字符串的生存期以及指针的相同作用域?

不,字符串文本的生存期与指向它们的指针的生存期无关;字符串文本存在于程序的整个生命周期中。

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

[lex.string]

6

在翻译阶段 6 之后,不以 编码前缀是普通字符串文本。普通字符串 文本的类型为"N 常量字符数组",其中 n 是 字符串定义如下,具有静态存储持续时间([basic.stc]), 并使用给定字符进行初始化。

15 计算字符串文本结果是字符串文本对象 静态存储持续时间,从给定字符初始化为 上面指定。...

字符串常量(文字)与整个程序具有相同的生存期。从创建指针之前的方式到销毁指针之后很久

相关文章:
  • 没有找到相关文章