tow*_*120 11 c++ constexpr c++11
请考虑以下代码:
static constexpr int make_const(const int i){
return i;
}
void t1(const int i)
{
constexpr int ii = make_const(i); // error occurs here (i is not a constant expression)
std::cout<<ii;
}
int main()
{
t1(12);
}
Run Code Online (Sandbox Code Playgroud)
为什么我在make_const调用时出错?
UPDATE
但是这个有效:
constexpr int t1(const int i)
{
return make_const(i);
}
Run Code Online (Sandbox Code Playgroud)
但是,这不是:
template<int i>
constexpr bool do_something(){
return i;
}
constexpr int t1(const int i)
{
return do_something<make_const(i)>(); // error occurs here (i is not a constant expression)
}
Run Code Online (Sandbox Code Playgroud)
Yak*_*ont 13
一个constexpr函数和constexpr相关变量,但不同的东西.
甲constexpr变量是一个变量,其值被保证可在编译时.
一个constexpr功能是,如果与评价函数constexpr的参数,并在执行过程中的行为"正确",将在编译时进行评估.
如果将非函数传递constexpr int给constexpr函数,则不会在编译时神奇地对其进行求值.但是,它将被允许通过constexpr其自身传递其输入参数的ness(正常函数不能这样做).
constexpr 函数是文档和对它们如何编写的限制以及对编译器的指令的混合.
这背后的原因是允许在编译时和运行时评估相同的函数.如果传递运行时参数,则它是运行时函数.如果传递了constexpr参数,则可以在编译时对其进行评估(如果在某些上下文中使用,则将进行评估).
const和之间的一个重要区别constexpr是,a constexpr可以在编译时进行评估.
通过编写,constexpr int ii = make_const(i);您告诉编译器该表达式将在编译时进行评估.由于i在运行时进行评估,编译器无法执行此操作并给出错误.
| 归档时间: |
|
| 查看次数: |
11005 次 |
| 最近记录: |