以下代码编译正常并成功运行。
#include <iostream>
constexpr int f();
int main()
{
int a = f();
std::cout << a << "\n";
// error: ‘constexpr int f()’ used before its definition
// constexpr int b = f();
// std::cout << b << "\n";
}
constexpr int f()
{
return 10;
}
这是输出。
$ g++ -std=c++11 foo.cpp && ./a.out
10
但是当我在注释中取消注释两行代码时,我收到了这个错误。
$ g++ -std=c++11 foo.cpp && ./a.out
foo.cpp: In function ‘int main()’:
foo.cpp:11:25: error: ‘constexpr int f()’ used before its definition
constexpr int b = f();
^
我知道通过在constexpr int f()
之前移动main()
的定义,我可以很容易地摆脱这个错误。
以下是我的问题:
constexpr
表达式中使用constexpr
函数之前定义constexpr
函数?constexpr
使用constexpr
之前声明constexpr
功能还不够?constexpr
函数的定义位置,就像在非constexpr
函数或非constexpr
函数中使用{ {1}}表达?constexpr
表达式中使用它后定义{{1}}函数是否可以?