用c ++聚合

0 c++

在下面的代码中,为什么这两个语句是非法的

const int i[] = { 1, 2, 3, 4 };

// float f[i[3]]; // Illegal

struct S { int i, j; };
const S s[] = { { 1, 2 }, { 3, 4 } };
//double d[s[1].j]; // Illegal
int main() {} 
Run Code Online (Sandbox Code Playgroud)

他们为什么非法?文字定义如下,我不明白.

"在数组定义中,编译器必须能够生成移动堆栈指针以容纳数组的代码.在上面的两个非法定义中,编译器都会抱怨,因为它无法在数组定义中找到常量表达式."

提前致谢.

Ker*_* SB 6

数组大小需要是常量表达式.试试这个:

constexpr int i[] = { 1, 2, 3, 4 };

float f[i[3]];
Run Code Online (Sandbox Code Playgroud)

constexpr关键字是在C++ 11中引入的.以前版本的C++没有这种通用常量表达式的概念,也没有相同的概念.