const char k[3]={1,2,3};
char v[3] = k;
char d[] = "kk"; // const char[3]kk но еще это и константный литерал
我真的不明白为什么可以用常量文字初始化数组,它也是一个数组,但常规数组却不是。我知道在常规数组的情况下应该进行逐字符复制,但为什么它在第二种情况下有效?
const char k[3]={1,2,3};
char v[3] = k;
char d[] = "kk"; // const char[3]kk но еще это и константный литерал
我真的不明白为什么可以用常量文字初始化数组,它也是一个数组,但常规数组却不是。我知道在常规数组的情况下应该进行逐字符复制,但为什么它在第二种情况下有效?
你也可以这样做
这些都是孤立的案例。文字和初始化列表不是数组;这些表达式的结果可以是数组。有问题
就是,在 Koenig 先生的巧手下,为了与 C 兼容,表达式的结果
k是类型为 的纯右值const char*。必须如此,否则表达式中运算符的标准定义 将不起作用- 它要求一个参数是纯右值,另一个参数可简化为可以添加到它的值,即 这是[1]。不兼容并且数组的大小不再已知。[]k[2]*(k + 2)const char*char[3]解决这种情况的方法是使用聚合初始化:
如果我们将类设为
Ar模板,我们就会得到标准类的原型std::array:[1]因此,`2[k]`也是一个合法的表达式。