constexpr const_reference at( size_type pos ) const;
STL容器访问器的这种重载如何与非constexpr参数一起使用?这种过载的经典用例是什么?
答案 0 :(得分:8)
函数声明中没有constexpr
参数。只有当且仅当该函数调用中涉及的所有参数都是常量表达式时,才能在编译时评估constexpr
函数调用。
话虽这么说,在编译时必须评估constexpr
函数的唯一情况是它用于计算模板参数。
您提供的示例至少有一个用例,适用于std::array::at
。
答案 1 :(得分:6)
STL容器访问器的这种重载如何与非constexpr参数一起使用?
声明一个函数constexpr
意味着如果使用其所有参数的常量表达式调用它,那么结果也是一个常量表达式。
仍然可以使用非常量参数调用它;你不能将结果用作常量表达式。
这种过载的经典用例是什么?
从合适的容器中获取编译时常量,例如:
constexpr std::array<int,5> values {{2,3,5,7,11}};
template <int n> void do_stuff(); // needs a compile-time constant
do_stuff<values.at(3)>(); // provide a compile-time constant