如果我们使用某些版本 DEV 自带的 GCC 4.9.2 开启 c++14 编译如下代码
#include <bits/stdc++.h>
using namespace std;
signed main() {
int n(10), aia[n+1];
cout << sizeof aia;
}
得到输出为 1. 显然这里正确的结果是 44.
目前除了 4.9.2 版本的编译器会出问题以外, 比它早的和比它晚的都没有发现出这个问题.
遇到这个情况, 建议直接改为 c++11 进行调试, 或者使用自己的编译器, 因为 NOI Linux 使用的编译器版本为 9.3.0.
原因很复杂, 互联网上有说法: sizeof 是编译器在执行, 所以在分配内存之前这个表达式就是一个常量了. 但是 aia 作为 VLA, 它在编译时是不知道有多大的, 因此出现了问题.