为什么 std::gcd/lcm 返回 std::common_type_t<M, N> 而不是 auto?

  • 本文关键字:std auto gcd lcm 返回 type common c++
  • 更新时间 :
  • 英文 :


来自cpp首选项:

template< class M, class N>
constexpr std::common_type_t<M, N> gcd(M m, N n);    (since C++17)

IIUC,返回正确的类型,

template< class M, class N>
constexpr auto gcd(M m, N n);    (since C++17)

自 C++14 以来具有相同的效果和更优雅。std::common_type_t只是c++11的解决方法。但std::gcd是自c++17

>auto指示应从实现中推断出类型。在没有实现的情况下auto放在文档页面上对阅读文档的任何人都没有帮助。另一方面,std::common_type_t具有明确定义的行为,该行为直接从该文档页面链接到,使其更有帮助。

指定std::gcd返回"auto"不会告诉标准API的实现者或用户任何关于函数返回的内容。这样的规范是没有用的。

请注意,尽管返回类型被指定为std::common_type_t<M, N>,但只要推导的类型符合规范,就没有什么可以阻止实现在其标头中使用auto返回类型。


std::common_type_t只是 C++11 的一种解决方法

不。std::common_type::type的别名std::common_type_t是在 C++14 中引入的。而且这不是"解决方法"。

最新更新