【发布时间】:2017-03-16 13:03:37
【问题描述】:
根据这个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?
【问题讨论】:
-
我怀疑它仍然带有隐含的
inline说明符。但是,实际上inline它仍然取决于编译器,特殊情况是可以在各种翻译单元中拥有多个定义 -
考虑添加
language-lawyer标签 -
“从 C++17 开始,模板函数可以声明为 constexpr,即使所有特化都不满足成为 constexpr 函数的要求。”从 C++11 开始就是这种情况。
-
好的,我更正了。
标签: c++ language-lawyer inline constexpr