能否显式指定std::gcd的模板参数?关于其算法属性的标准疑问
能否显式为std::gcd指定模板参数?
根据C++标准中[numeric.ops.gcd]的规定:
template<class M, class N> constexpr common_type_t<M, N> gcd(M m, N n);强制要求:
M和N均为除 cvbool之外的整数类型。
从强制要求来看,哪怕实用性不高,似乎允许这样调用:
std::gcd<const int, volatile int>(0, 0);
这是因为const int属于算术类型。
但标准中[algorithms.requirements]第15款规定:
显式指定模板参数列表调用算法时,其语法合法性和行为是未指定的,除非另有明确说明。
这就引出了两个疑问:
std::gcd是否属于算法?- 更普遍地说,什么是算法?
目前在标准中找不到“算法”的明确定义,不过[numeric.ops.gcd]是嵌套在[algorithm]条款下的,因此std::gcd有可能被归类为算法。
内容的提问来源于stack exchange,提问作者Jan Schultke
相关产品推荐
相关产品推荐

