c++ - constexpr 函数的主体不是返回语句

标签 c++ function c++11 constexpr return-type

在下面的程序中,我在func() 中添加了显式的return 语句,但是编译器给出了以下错误:

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语句,然后为什么会出现上述错误?

最佳答案

在 C++14 之前,constexpr 函数的主体必须仅由 return 语句组成:它不能包含任何其他语句。这在 C++11 中有效:

constexpr int func (int x) 
{
  return x < 0 ? -x : x;
}

在 C++14 及更高版本中,您编写的内容是合法的,就像大多数其他语句一样。

Source.

关于c++ - constexpr 函数的主体不是返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45097171/

相关文章:

c++ - 为什么 std::string 不定义乘法或文字?

c++ - 为什么函数调用是一个 xvalue(如果返回类型是一个右值)?

C++11 随机数和 std::bind 以意想不到的方式交互

javascript - 从功能外部控制 BX slider

php - css 样式 php 作为函数

php - 如何获取 PHP 类中所有函数的数组?

c++ - C++11 中有并发容器吗?

c++ - 出于某种原因,OutputStream 打印 '1'

c++ - 关联两个独立的键

c++ - 用用户输入填充网格