将数组的大小设置为从另一个常量的除法派生的const的值

Ger*_*ald 2 c++ arrays const constant-expression

我有这两个假设的常量:

int const MATRIX_SIZE = 1000;

int const LONGEST_LR_LINK = (int)floor(MATRIX_SIZE/2);
Run Code Online (Sandbox Code Playgroud)

我试图声明一个数组:

int lrLinkArray [LONGEST_LR_LINK];
Run Code Online (Sandbox Code Playgroud)

我收到错误:

错误:数组绑定在']'标记之前不是整数常量

手动插入MATRIX_SIZE用于LONGEST_LR_LINK的任何一半都不会那么麻烦,但我很好奇这个解决方案是什么.对const进行任何计算是不好的做法吗?

Bri*_*ian 7

C++中的整数除法自动向下舍入.所以,如果你有定义

int const LONGEST_LR_LINK = MATRIX_SIZE/2;
Run Code Online (Sandbox Code Playgroud)

那么LONGEST_LR_LINK确实会是一个不变的表达,而且

int lrLinkArray [LONGEST_LR_LINK];
Run Code Online (Sandbox Code Playgroud)

应该没事.此外,floor(MATRIX_SIZE/2)不管你认为它做了什么,无论如何; 你必须写floor(MATRIX_SIZE/2.0),以强制非整数除法.