c++ - 即使实例化不是 constexpr,声明为 constexpr 的模板函数是否始终内联?

标签 c++ language-lawyer inline constexpr

根据这个answer constexpr 函数始终为 inline .

可以声明模板函数constexpr即使所有特化都不能满足 constexpr 的要求功能。在最后一种情况下,特化不是 constexpr .

例如:

template<class T>
constexpr decltype(auto) size(const T& a){
   return a.size();
}
std::array<int,10> arr;
std::vector<int> vec;
size(arr);//constexpr
size(vec);//not a constexpr;

实例化size<std::vector>不是constexpr ,但是是inline吗? ?

最佳答案

是的;引用 N4640,[dcl.constexpr]/1:

… A function or static data member declared with the constexpr specifier is implicitly an inline function or variable. …

这里的关键是“声明为”——声明才是重要的,而不是满足 constexpr 要求。

关于c++ - 即使实例化不是 constexpr,声明为 constexpr 的模板函数是否始终内联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42834902/

相关文章:

c++ - QGraphicsBlurEffect 调整 Text 的大小但不调整 Widget 本身

c++ - Qt5 和 Cmake 链接 QApplication 头错误

c++ - 通过 void* 进行转换,而不是使用 reinterpret_cast

jQuery 就地反弹

javascript 内联与传统注册

c++ - boost协程如何在coro_t完成后检索函数返回值

c++ - 如何使用 gtest 对 std::bind 函数进行单元测试?

c++ - C++11 中的延迟初始化顺序

c++ - 从初始化列表中推导构造函数的模板参数

css - 一个div的高度等于另一个