将数组的大小设置为从另一个常量的除法派生的常量值
Setting an array's size to the value of a const derived from the division of another constant
我有两个假定的常数:
int const MATRIX_SIZE = 1000;
int const LONGEST_LR_LINK = (int)floor(MATRIX_SIZE/2);
我正试图声明一个数组:
int lrLinkArray [LONGEST_LR_LINK];
我得到错误:
错误:数组绑定不是']'标记之前的整数常量
手动插入LONGEST_LR_LINK的一半MIX_SIZE不会有太大麻烦,但我很好奇这个问题的解决方案是什么。对常量进行任何类型的计算都是不好的做法吗?
C++中的整数除法会自动向下取整。所以如果你有的定义
int const LONGEST_LR_LINK = MATRIX_SIZE/2;
那么LONGEST_LR_LINK
将确实是一个常数表达式,并且
int lrLinkArray [LONGEST_LR_LINK];
应该没事。此外,无论如何,floor(MATRIX_SIZE/2)
不会做你认为它会做的事情;为了强制进行非整数除法,您必须编写floor(MATRIX_SIZE/2.0)
。
int const LONGEST_LR_LINK = MATRIX_SIZE/2;
整数除法已经四舍五入。
整数除法应该做你想做的事,我们可以从C++标准草案中看到,在5.6
乘法运算符一节中,它说:
[…]对于整数操作数,/运算符产生代数商丢弃任何小数部分81[…]
要理解为什么不这样做,您必须意识到,即使使用使其成为常量表达式的文字来初始化MATRIX_SIZE
std::floor也不是constexpr函数,因此LONGEST_LR_LINK
也不是常量表达式,不能用于需要积分常量表达式的数组边界。
此外,据我所知,常量表达式中也不允许使用旧式C类型转换。
相关文章:
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 如何为包含另一个类实例的数组制作常量 getter?
- C++ - 无法将顶部常量指针分配给另一个非常量指针
- 另一个:从"常量类型*"到"类型*"的转换无效
- 从另一个常量标准::映射初始化一个常量标准::映射的一部分
- 通过引用常量函数调用另一个类的非常量函数
- 如何在另一个成员函数中修改具有常量返回类型的成员函数的返回值
- C++ 给出编译器错误,将一个(静态)常量全局变量设置为另一个静态常量变量
- 使用对另一个元组不同类型的元素的非常量引用来初始化元组的元素
- 我能否确定在被另一个实体修改时会更新常量引用
- 访问另一个类中的静态常量
- C++重载运算符两次,一个返回非常量引用,另一个返回常量引用,首选项是什么
- 如何在另一个命名空间中使用常量定义的外部
- 全局静态常量shared_ptr被另一个shared_ptr的析构函数奇怪地窃取和删除,为什么?
- 我想将一个常量字符串写入包含另一个输入数据块的文件
- 当我们在另一个程序中调用该程序时,更改程序中常量参数的值
- 来自另一个类的 switch 语句中的静态 const int 会导致错误 C2051:案例表达式不是常量
- C++字符 * 常量与字符 *,为什么有时一个有时另一个
- 从另一个类对象调用常量函数