能否用字符串字面量初始化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
相关产品推荐
相关产品推荐

