为什么std :: gcd / lcm返回std :: common_type_t <m,n =“”>而不是auto?

时间:2018-09-27 00:29:39

标签: c++

来自cppreference

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

2 个答案:

答案 0 :(得分:5)

auto指示应从实现中推断类型。将auto放在文档页面上,实现对阅读文档的人没有帮助。另一方面,std::common_type_t具有明确定义的行为,可以直接从该文档页面链接到该行为,从而使其更加有用。

答案 1 :(得分:3)

指定private String[] button_Shapes; //Create new form Calculator public JCalculator(){ //... //Put buttons in an array button_Shapes = {"7", "8", "9", "/", "4", "5", "6", "x", "1", "2", "3", "-", "0", "C", "=", "+"}; 返回“ std::gcd”不会告诉标准API的实现者或用户有关函数返回内容的任何信息。这样的规范将无用。

请注意,尽管返回类型被指定为auto,但是只要推断出的类型符合规范,什么都不会阻止实现在其标头中使用std::common_type_t<M, N>返回类型。


  

auto只是c ++ 11的一种解决方法

不。 std::common_type_t的{​​{1}}别名在C ++ 14中引入。这不是“解决方法”。