Loc*_*ead 9 c++ arrays initialization
只要变量是const,初始化可变大小的数组时GCC不会出错,但是当它不是时,它就不会编译.
这背后的原因是什么?这样做有什么不妥:
int size = 7;
int test[size] = {3, 4, 5};
Run Code Online (Sandbox Code Playgroud)
根本不会编译,但如果我不初始化test []那么它会编译!这对我来说没有任何意义,因为据我所知,无论什么(这意味着我使用的整数文字都不是真的),需要根据它的大小(7个整数)来使堆栈框架适合这个数组.如果我没有弄错的话,有任何意义,那么如果我初始化它会有什么不同?
只是我疯狂的C++设计问题中的另一个......
谢谢!
int arr[5];)用常量表达式初始化的常量积分变量是常量表达式.(const int j = 4; const int i = j; int a[i];)
使用非常量表达式初始化的常量变量不是常量表达式
int x = 4; // x isn't constant expression because it is not const
const int y = x; //therefore y is not either
int arr[y]; //error)
Run Code Online (Sandbox Code Playgroud)实际上,这更像是一个疯狂的C99设计问题,因为可变长度数组是C99的一项功能,gcc允许C ++作为扩展。
在C99中,6.7.8 / 3表示“要初始化的实体的类型...不是可变长度数组类型”,因此gcc对其扩展使用的规则与C99所要求的相同。
C99基本原理文档未说明为何无法初始化VLA。我可以推测,如果为大小提供的值小于初始化器,则可能是由于初始化器中元素过多的风险。但是我不知道。