esh*_*esh 8 c c++ compiler-errors
const int t=5;
char buf[t+5];
Run Code Online (Sandbox Code Playgroud)
当我编译它时,在C中给出错误但在C++中没有!
有人可以解释一下原因吗?
注意:我知道const默认为'C++'中的内部链接,其中'C'默认为外部链接.它与上述情况有什么关系吗?
正如其他人所解释的,C 比 C++ 更简单,并且不允许 const 变量出现在整数常量表达式中。但在 C89 和 C++ 中声明的数组必须具有编译时常量大小。
您可以为此使用枚举
enum {
BufSize = 5
};
char buf[BufSize + 5];
Run Code Online (Sandbox Code Playgroud)
它与内部链接无关 - 外部链接变量在 C++ 的整数常量表达式中同样可行。C++ 中的内部链接是允许它们出现在常量表达式中的结果,但不是必然。C++ 标准解释了为什么它们默认具有内部链接
由于 const 对象可以用作 C++ 中的编译时值,因此此功能促使程序员为每个 const 提供显式的初始值设定项。此功能允许用户将 const 对象放入许多编译单元中包含的头文件中