来自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 中引入的。而且这不是"解决方法"。