在以下程序中,我在return
中添加了一个显式func()
语句,但编译器给出了以下错误:
m.cpp: In function ‘constexpr int func(int)’:
m.cpp:11:1: error: body of constexpr function ‘constexpr int func(int)’ not a return-statement
}
这是代码:
#include <iostream>
using namespace std;
constexpr int func (int x);
constexpr int func (int x)
{
if (x<0)
x = -x;
return x; // An explicit return statement
}
int main()
{
int ret = func(10);
cout<<ret<<endl;
return 0;
}
我使用以下命令在 g ++ 编译器中编译了程序。
g++ -std=c++11 m.cpp
我在功能中添加了return
语句,然后为什么我遇到了上述错误?
答案 0 :(得分:12)
在C ++ 14之前,constexpr
函数的主体必须只包含return
语句:它内部不能包含任何其他语句。这适用于C ++ 11:
constexpr int func (int x)
{
return x < 0 ? -x : x;
}
在C ++ 14及更高版本中,您所写的内容与大多数其他声明一样合法。
答案 1 :(得分:11)
C ++ 11的constexpr
函数比这更具限制性。
来自cppreference:
函数体必须删除或默认,或者只包含以下内容:
- null语句(普通分号)
static_assert
声明typedef
声明和不定义类或枚举的别名声明using
声明using
指令- 只有一个
return
声明。
所以你可以这样说:
constexpr int func (int x) { return x < 0 ? -x : x; }
static_assert(func(42) == 42, "");
static_assert(func(-42) == 42, "");
int main() {}
请注意,此限制已在C ++ 14中解除。