在C
中,您可以写
const char *result = "AB";
C++
是否标准支持这种样式?可以保证该常量字符串的生命周期与指针的作用域相同吗?
答案 0 :(得分:1)
文字字符串常量在整个程序中都有生命周期,并且字符串存储在其中的数组永远不会超出范围。
请注意,C和C ++中的文字字符串在语义上有所不同:在C ++中,文字字符串存储在恒定字符数组中(因此const
中的const char*
是需要)。在C语言中它们不是常量数组(因此char *
在C语言中还可以)。但是,不允许在C中修改文字字符串,这会使它们只读(但不是常量)。
答案 1 :(得分:1)
这个常量字符串的生命周期和指针的作用域是否得到保证?
不,字符串文字的生存期与指向它们的指针的生存期无关。 String literals存在于程序的整个生命周期中。
字符串文字具有static storage duration,因此在程序生命周期内存在内存中。
6翻译阶段6之后,一个string-literal开头不是 编码前缀是普通的字符串文字。一个普通的弦 文字的类型为“ n const char数组”,其中n是 如下定义的字符串,具有静态存储期限([basic.stc]), 并使用给定的字符进行初始化。
15评估string-literal会导致字符串文字对象具有 静态存储期限,从给定字符初始化为 以上指定。 ...
答案 2 :(得分:1)
引用C++17
,第5.13.5章(强调我的)
普通字符串文字和UTF-8字符串文字也称为窄字符串文字。一个箭头 字符串文字的类型为“ n const char数组”,其中n是下面定义的字符串的大小,,并且具有 静态存储期限
,在静态存储期间,请参见第6.7.1节
所有没有动态存储持续时间,没有线程存储持续时间并且是 非本地具有静态存储期限。 这些实体的存储期限为 程序。
因此,字符串文字的生命周期是程序的整个执行过程,永远不会超出范围。
答案 3 :(得分:0)
字符串常量(文字)与整个程序具有相同的生存期。从指针创建之前到销毁之后很长