You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用字符串字面量初始化cv限定的char数组?C++标准疑问

C++标准中cv限定普通字符数组的字符串字面量初始化合法性问题

当前[dcl.init.string] p1中的措辞规定:

普通字符类型的数组[...]可由普通字符串字面量[...]或由大括号括起的类型匹配的string-literal初始化。

其中普通字符类型包括char、signed char和unsigned char,不包含这些类型的cv限定版本。

这就带来了模糊性:无法明确const char或volatile char数组是否也能用字符串字面量初始化,而非仅char数组。合理的措辞应当补充:

cv普通字符类型的数组[...]

这个疑问在如下场景中尤为关键:

const char str[] = "test"; // 该语句是否合法?

答案是:标准明确允许这种用法,并非措辞缺陷。
虽然[dcl.init.string] p1的字面表述只提到“普通字符类型的数组”,但结合标准中数组初始化的cv限定兼容规则,字符串字面量(类型为const char[N],N为字符总数+1)初始化const char[]数组属于类型兼容的初始化场景,编译器会自动推导数组大小并完成初始化。
此外,const char str[] = "test";是C++中广泛使用的常规写法,所有主流编译器均完全支持,这也符合标准的设计意图。

内容的提问来源于stack exchange,提问作者Jan Schultke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:20:21