C++:"expected constant expression"
c++: "expected constant expression"
我在以下代码的最后一行中遇到了"预期恒定表达式"错误:
int main() {
const float a = 0.5f;
const float b = 2.0f;
int array_of_ints[int(a*b + 1)];
}
我想这是由于int(a*b + 1)
在编译期间不知道的事实,对吗?我的问题是:有什么方法可以编码上述示例,以使其起作用,并且array_of_ints
具有尺寸int(a*b + 1)
?
对这里发生的事情的任何帮助或见解将不胜感激:)
编辑:我意识到向量将解决此问题。但是,我希望数组的内容在堆栈上。
将两个常数声明为 constexpr
(不幸的是仅自C 11以来可用):
int main() {
constexpr float a = 0.5f;
constexpr float b = 2.0f;
int array_of_ints[int(a*b + 1)];
}
另外(对于C 11之前的C ),您可以使用std::vector
。
声明 const int
:
int main()
{
const float a = 0.5f;
const float b = 2.0f;
const int s = static_cast<int>(a * b) + 1;
int array_of_ints[s];
return 0;
}
示例
请注意,这在我目前可以访问的最古老的编译器上起作用(g 4.3.2)。
如果您不使用C 11,则使用std :: vector:
std::vector<int> array_of_ints(int(a*b + 1));
这将导致向量预先分配指定的空间,并将所有ints初始化为零。
当试图在运行时或执行过程中声明数组的大小时,就会发生"预期常数表达式"错误。发生这种情况是因为编译器不能;首先,计算阵列大小,然后将这么多空间分配给数组。一个简单的解决方案是用const int声明数组另一种方法是制作一个动态数组: int array_name = new int [size];
相关文章:
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 为什么static_assert错误:即使我传递常量"expression must have a constant value"?
- C++ "error: invalid use of void expression"
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 对象声明中的模板"error: expected expression"
- 如何修复 eigen3 中的'non-type template argument is not a constant expression'?
- 如何修复此错误"the value of 'x1' is not usable in a constant expression"?static_assert
- 当值不能恒定时如何修复"Expression must have a constant value"?
- 将 int 与 double 进行比较的预处理器"invalid integer constant expression"
- 我可以忽略"Intellisense: (E0028) expression must have a constant value"吗?
- 使用可变宏时获得"Error: #28: expression must have a constant value "
- C++:"expected constant expression"
- 检查布尔模板参数时摆脱"conditional expression is constant"警告的方法?
- boost::asio::d eadline_timer 导致"a function call cannot appear in a constant-expression"错误
- constexpr with std::array - "Non-type template argument is not a constant expression"
- 如何避免模板代码中编译时常量条件"conditional expression is constant"警告?
- 无符号字符给出错误:"expression must have a constant value"
- 'Constant Expression Required' 错误,同时将正式参数保留为常量
- 如何编译 MSHTML v9 的.dll。我目前收到 100 多个"MIDL 2035: constant expression expected"错误
- 使用流时"expression must have a constant value"