const int num = 16;
struct inputs{
double X1[num];
double X2[num];
};
Run Code Online (Sandbox Code Playgroud)
给我一个错误:
错误:在文件范围内修改了'X1'
"X2"也是如此.
但是我记得上面的C++很好,上面说的很好(我可能会误认为是C++).
任何人都可以为我澄清一下吗?
我可以指向一个C FAQ:我不明白为什么我不能在初始化器和数组维度中使用const值.
它基本上说是num不是一个真正的常数,它只是只读的.要获得真正的常数,你需要一个#define num 16.
同样在那个页面上:在这方面,C与C++不同.
是的,有区别。在 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数组;您收到的错误消息基本上是试图告诉您这些仅允许在函数内部使用。
| 归档时间: |
|
| 查看次数: |
1231 次 |
| 最近记录: |