这是一个C ++编程代码,用于显示array1和array2的值,但我得到一个编译时错误,因为' Constant Expression Required'。请帮忙
void display(const int const1 = 5)
{
const int const2 = 5;
int array1[const1];
int array2[const2];
for(int i = 1 ; i < 5 ; i++)
{
array1[i] = i;
array2[i] = i * 10;
std::cout << array1[i] << std::endl;
}
}
void main()
{
display(5);
}
答案 0 :(得分:1)
在C ++中,const
并不总是constexpr
。在这些日子里,constexpr
不存在,因此编译时间常数的唯一方法是使用const
和文字,或使用enum
,因为两者都是编译器很容易检查这些值。
但是,在C ++ 11中,我们添加了constexpr
,它保证constexpr
变量在编译时具有可用值,并声明可以评估constexpr
函数如果所有参数都是constexpr
,那么aat编译时间。
在您的代码中,您可以像这样编写变量const2
:
void display(const int const1=5)
{
constexpr int const2 = 5;
// ...
}
现在,您的代码对您正在做的事情更具表现力。你可以说“这个变量在编译时有一个已知值,这里是值”,而不是依赖于const在编译时可用。
但是,如果您尝试更改const1
,则会收到错误消息。参数,即使默认值始终为运行时已知的值。如果该值仅在运行时已知,则不能在模板参数或数组大小中使用它。
如果您希望函数能够receive
将值const1
作为常量表达式从中接收它作为模板参数,因为模板参数在编译时始终是已知的。 / p>
template<int const1 = 5>
void display()
{
constexpr int const2 = 5;
int array1[const1];
int array2[const2];
}
您必须像这样调用您的函数:
// const1 is 5
display();
// const1 is 10
display<10>();
如果您想了解有关模板的更多信息,请查看Function templates或此tutorial