C++ 设置数组';s size为另一个常数的除法所得的常数的值
我有两个假定常数:C++ 设置数组';s size为另一个常数的除法所得的常数的值,c++,arrays,constants,constant-expression,C++,Arrays,Constants,Constant Expression,我有两个假定常数: int const MATRIX_SIZE = 1000; int const LONGEST_LR_LINK = (int)floor(MATRIX_SIZE/2); 我正在尝试声明一个数组: int lrLinkArray [LONGEST_LR_LINK]; 我得到一个错误: 错误:数组绑定不是“]”标记之前的整数常量 对于最长的链接,手动插入任何半矩阵大小都不会有太大的麻烦,但我很想知道解决这个问题的方法是什么。对于C++中的常数< < /p> 整数除法,自动计
int const MATRIX_SIZE = 1000;
int const LONGEST_LR_LINK = (int)floor(MATRIX_SIZE/2);
我正在尝试声明一个数组:
int lrLinkArray [LONGEST_LR_LINK];
我得到一个错误:
错误:数组绑定不是“]”标记之前的整数常量
对于最长的链接,手动插入任何半矩阵大小都不会有太大的麻烦,但我很想知道解决这个问题的方法是什么。对于C++中的常数< < /p> 整数除法,自动计算是否是一种错误的做法?如果你有定义的话
int const LONGEST_LR_LINK = MATRIX_SIZE/2;
然后,LONGEST\u LR\u LINK
将确实是一个常量表达式,并且
int lrLinkArray [LONGEST_LR_LINK];
应该没问题。除此之外,地板(矩阵大小/2)
无论如何都不会像你想象的那样;您必须编写floor(MATRIX\u SIZE/2.0)
以强制非整数除法
int const LONGEST_LR_LINK = MATRIX_SIZE/2;
整数除法已经四舍五入了。整数除法应该可以执行您想要的操作,我们可以从第
5.6节的乘法运算符中看到这一点:
[…]对于整数操作数,/运算符产生代数商
丢弃任何小数部分;81[……]
要理解为什么它不是,您必须认识到,即使您使用使其成为常量表达式的文本初始化矩阵大小
,但它不是常量表达式,因此最长的链接
也不是常量表达式,不能用于需要整数常量表达式的数组边界
此外,据我所知,在常量表达式中也不允许使用旧式C类型转换。@chris请不要这样做。在除以两个正整数时,您不需要floor
。@ShafikYaghmour,是的,这是一个很好的观点。@chris太糟糕了,大多数得分很高的答案都有错误的答案,而且没有足够的反对票。谢谢。我想我脑子里想的是整数除法会返回一个浮点余数。