模板函数是否以内联方式声明 constexpr,即使实例化不是 constexpr
Does template function declared constexpr allways inline even if instantiation is not constexpr?
根据这个答案,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:
用
constexpr
说明符声明的函数或静态数据成员隐式是内联函数或变量。
这里的关键是"声明"——声明才是重要的,而不是满足constexpr
要求。
相关文章:
- 从C++实例化QML
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 约束和显式模板实例化
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 静态数据成员模板专用化的实例化点在哪里
- 错误的cv::face FacemarkLBF实例化
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 无法编译包含"if constexpr"的函数模板实例化
- 使用返回 constexpr 对进行模板实例化
- 带有constexpr std :: string_view vs用std :: string实例化枚举的枚举
- 模板函数是否以内联方式声明 constexpr,即使实例化不是 constexpr
- 编译器之间在丢弃的 if constexpr(false) 语句中实例化模板的行为不一致
- 可以在C++14 constexpr函数中使用for循环实例化模板
- 模板实例化与 constexpr 函数失败
- 应该decltype(foo(1))实例化constexpr函数模板foo
- 使用constexpr数组的元素与const数组的元素实例化模板