在头文件中前向声明 constexpr 函数

Dei*_*Dei 5 c++ constexpr c++11 c++14

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

头文件.h

extern constexpr int fun(int);
Run Code Online (Sandbox Code Playgroud)

源文件

constexpr int fun(int x) 
{
    return x * 2; 
}
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 8

这是错的。constexpr意味着该函数是内联的。内联函数必须在使用它的每个翻译单元中定义。如果您在翻译单元中包含该标题,而不是source.cpp并使用该函数,则该翻译单元缺少定义。

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

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

  • `extern inline` 很好,但默认情况下 `extern` 是多余的。 (2认同)