有人可以解释一下这是如何编译的吗?
constexpr int Add(int a, int b)
{
return a + b;
}
int main()
{
int a, b; //Both left Uninitialized as locals
char arr[Add(a, b)];
cout << sizeof(arr) << endl;
}
似乎数组定义为未知大小,因为它们都是&#39; a&#39;和&#39; b&#39;有未知价值?
直播example。
答案 0 :(得分:4)
您展示的在线编译器使用-std=gnu++1y
作为标准,并且不使用-pedantic
。这并没有禁用某些扩展,特别是GCC和clang支持作为扩展的C99可变长度数组(VLA)。
要获得警告,请使用-pedantic
。要收到错误,请使用-pedantic-errors
(或更一般的-Werror
)。对于此特定扩展程序,-Wvla
将针对g++
为-Wvla-extension
,clang++
执行此操作。
也更喜欢-std=c++1y
而不是GNU变种来避免扩展。
铛++:
warning: variable length arrays are a C99 feature [-Wvla-extension]
克++:
warning: ISO C++ forbids variable length array 'a' [-Wvla]