【问题标题】:Forward declaring a constexpr function in a header [duplicate]在标头中转发声明 constexpr 函数[重复]
【发布时间】:2016-01-27 16:45:58
【问题描述】:

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

header.h

extern constexpr int fun(int);

source.cpp

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

【问题讨论】:

  • @NathanOliver:相关,但不同的规则适用于函数和类。这不是重复的。
  • @BenVoigt 这就是我没有实际投票的原因。答案应该有效。

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


【解决方案1】:

这是错误的。 constexpr 表示该函数是内联的。必须在使用它的每个翻译单元中定义内联函数。如果您将该标题包含在source.cpp 以外的翻译单元中并使用该函数,则该翻译单元缺少定义。

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

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

【讨论】:

  • extern inline 很好,但它的extern 默认是多余的。
猜你喜欢
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2023-04-10
  • 2010-12-27
  • 2010-11-08
  • 1970-01-01
相关资源
最近更新 更多