C++ constexpr
比如我有一个函数,返回10
int get10()
{
return 10;
}
我想拿去初始化数组大小
int arraynum[get10()];
编译器会报错,因为会说只能用常量去初始化,所以我们可以用constexpr,把函数改成常量表达式,这样编译器在编译阶段就知道了常量。
再比如一个可变参函数模板,我想递归去使用参数,当参数个数为0的时候结束递归
template<typename T,typename ... U>
void Println(T t,U... u)
{
if (sizeof...(U)==0) //错误
cout<<t<<endl;
else
{
cout<<t<<endl;
Println(u...);
}
}
因为编译器在编译阶段不知道有Println(T t);这个函数,这个只有在运气阶段才知道,所以会报错。
我们也可以修改成常量表达式让编译器在编译阶段就可以运行这个表达式。
template<typename T,typename ... U>
void Println(T t,U... u)
{
if constexpr(sizeof...(U)==0) //错误
cout<<t<<endl;
else
{
cout<<t<<endl;
Println(u...);
}
}
标签:...,常量,C++,constexpr,编译器,Println
From: https://www.cnblogs.com/AndreaDO/p/18027056