Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 设置数组';s size为另一个常数的除法所得的常数的值_C++_Arrays_Constants_Constant Expression - Fatal编程技术网

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太糟糕了,大多数得分很高的答案都有错误的答案,而且没有足够的反对票。谢谢。我想我脑子里想的是整数除法会返回一个浮点余数。