Joh*_*itb 14
我不确定你在这种情况下通过"初始化/声明"引用了什么.在下文中,数组是prvalue
template<typename T> using alias = T;
int main() { return alias<int[]>{1, 2, 3}[0]; }
Run Code Online (Sandbox Code Playgroud)
这可以通过decltype(alias<int[]>{1, 2, 3})具有类型来验证int[3].以这种方式动态创建数组最初并不打算工作,而是通过统一初始化的相关工作进入工作草案.当我意识到C++ 0x工作草案中的某些段落不允许这种即时创建阵列临时工具的特殊情况而其他段落允许时,我向C++委员会发送了一份缺陷报告,然后在此基础上海湾合作委员会的部分工作实施决定全力支持这一点.
您无法获取数组类型的右值。数组只能是左值,每当它们在左值中使用时,它们就会衰减为指向第一个元素的指针。
int array[10];
int * p = array; // [1]
Run Code Online (Sandbox Code Playgroud)
array[1] 中的表达式是类型为 的左值int (&)[10],会转换为 类型的右值int *p,即N==10 T==int 的右值数组转换为指向 T==int 的指针类型的左值。