转发在标头中声明constexpr函数

时间:2016-01-27 16:45:58

标签: c++ c++11 c++14 constexpr

说我有以下文件。这是无效的C ++(链接器扼流圈,所以是的)还是我的语法错误? constexpr函数的前向声明必须与其定义在同一个文件中吗?

header.h

extern constexpr int fun(int);

source.cpp

constexpr int fun(int x) 
{
    return x * 2; 
}

1 个答案:

答案 0 :(得分:4)

这是错的。 constexpr表示该函数是内联的。必须在使用它的每个翻译单元中定义内联函数。如果您在{{1}}以外的翻译单元中包含该标头并使用该功能,则该翻译单元缺少该定义。

因此,解决方案是将实现移至标头。无需担心多重定义,因为函数是内联的。

技术上并不需要在同一个文件中,但由于定义必须在每个使用该函数的文件中,因此最简单的方法是在同一个文件头中定义它。

相关问题