【发布时间】:2019-10-03 22:41:15
【问题描述】:
如果我在 program.cpp 中定义一个函数:
constexpr bool isThree(const int number)
{
return number == 3;
}
这与声明它是静态的有什么不同吗?
static constexpr bool isThree(const int number)
{
return number == 3;
}
似乎它们应该是等价的,因为constexpr 表示该函数是内联的,因此不会在编译单元之间共享。
constexpr 全局函数是隐式静态的吗?
【问题讨论】:
-
您的推理暗示
static和inline是相同的,但它们不是。实际上,这与constexpr的功能无关。 -
constexpr 是编译时特性,其中 inline/static 是运行时特性。
-
constexpr 的含义比 static 更受限制。意思是给定一个特定的输入值,返回值总是相同的,编译器应该能够在编译过程中完全解决它。静态函数仅在一个编译单元内具有作用域。返回的值可能会根据它访问的其他变量而改变。
-
@MichaelChourdakis
inline是一个运行时的东西吗?它主要是链接时间(ODR - 和可能的编译时间提示)。运行时代码已经生成,inline早已不复存在/毫无意义。static也主要影响链接/可见性,而不是运行时行为。
标签: c++ c++11 constexpr static-functions