代码之家  ›  专栏  ›  技术社区  ›  Chen Li

为什么std::gcd/lcm返回std::common类型而不是auto?

c++
  •  2
  • Chen Li  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  3
  •   eerorika    6 年前

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

    std::common_type_t<M, N> ,没有什么可以阻止实现使用 只要导出的类型符合规范,就在其标头中返回类型。


    std::common_type_t 只是c++11的一个变通方法

    不。 标准::普通类型 的别名 std::common_type::type

        2
  •  5
  •   Silvio Mayolo    6 年前

    auto 指示应从实现推断类型。放 汽车 在文档页上 这个实现对任何阅读文档的人都没有帮助。另一方面, std::common_type_t 具有定义良好的行为,直接从文档页链接到,使其更有帮助。