这是一个c++编程代码显示array1和array2的值,但我得到一个编译时错误为'常数表达式要求'。请帮助
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);
}
在c++中,const
并不总是constexpr
。在过去,constexpr
不存在,所以拥有编译时间常数的唯一方法是使用const
和文字,或者使用enum
,因为这两种方法都很容易让编译器检查值。
然而,在c++ 11中,我们增加了constexpr
,它保证constexpr
变量在编译时有一个可用的值,并且声明如果所有参数都是constexpr
, constexpr
函数可以在编译时求值。
const2
:
void display(const int const1=5)
{
constexpr int const2 = 5;
// ...
}
现在你的代码更能表达你正在做的事情。而不是依赖const在编译时可用,你说"这个变量在编译时有一个已知的值,这就是它的值"。
然而,如果你试图改变const1
,你会得到一个错误。参数,即使默认值始终作为运行时已知的值。如果该值仅在运行时已知,则不能在模板参数或数组大小中使用它。
如果你希望你的函数能够receive
值const1
作为一个常量表达式,你可以从那里接收它作为模板参数,因为模板参数在编译时总是已知的。
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>();
如果你想了解更多关于模板的知识,请查看函数模板,或者本教程