C和C++的数组大小声明差异

Ric*_*ich 5 c c++ arrays

const int num = 16;
struct inputs{
       double X1[num];
       double X2[num];
};
Run Code Online (Sandbox Code Playgroud)

给我一个错误:

错误:在文件范围内修改了'X1'

"X2"也是如此.

但是我记得上面的C++很好,上面说的很好(我可能会误认为是C++).

任何人都可以为我澄清一下吗?

cni*_*tar 8

我可以指向一个C FAQ:我不明白为什么我不能在初始化器和数组维度中使用const值.

它基本上说是num不是一个真正的常数,它只是只读的.要获得真正的常数,你需要一个#define num 16.

同样在那个页面上:在这方面,C与C++不同.


Jer*_*fin 3

是的,有区别。在 C 中,const变量仍然不被视为真正的编译时常量(官方不允许它成为 a 的一部分constant expression),因此这是不允许的。但请注意,尽管 C 不要求编译器允许这样做,但该标准确实允许实现接受其他形式的常量表达式,因此如果它选择的话,可以自由地接受它。

在C++中,const变量被视为常量,因此是允许的。

有趣的是,当您使用作为函数参数传递的值时,情况大致相反:

void f(int size) { 
    int array[size];
}
Run Code Online (Sandbox Code Playgroud)

这在 C 中允许的,但在 C++ 中不允许。这是一个variably modified数组;您收到的错误消息基本上是试图告诉您这些仅允许在函数内部使用。