📜  C++ 20中的midpoint()与示例(1)

📅  最后修改于: 2023-12-03 15:29:49.095000             🧑  作者: Mango

C++ 20中的midpoint()与示例

在C++ 20中,引入了一个新的函数midpoint(),可以返回两个不同类型的数值的中间值。

该函数可通过#include <bit>头文件使用。

函数原型
template<class T>
T midpoint(T a, T b) noexcept;

template<class T, class U>
auto midpoint(T a, U b) noexcept -> std::common_type_t<T, U>;
  • T midpoint(T a, T b) noexcept:返回类型为T的a和b的中间值。
  • auto midpoint(T a, U b) noexcept -> std::common_type_t<T, U>:返回类型为T和U的a和b的中间值。其中std::common_type_t<T, U>从类型T和类型U中推断出常规类型的模板类型。
示例

以下是midpoint()函数的示例,使用了上述两个重载:

#include <iostream>
#include <bit>

template <typename T>
void print(T data) {
    std::cout << data << std::endl;
}

int main() {
    // 使用T类型的midpoint()
    int a = 2;
    int b = 6;
    double c = 4.3;
    double d = 7.5;
    print(std::midpoint(a,b)); //Output: 4
    print(std::midpoint(c,d)); //Output: 5.9

    // 使用T和U类型的midpoint()
    std::pair<int, double> p1 {2, 4.2};
    std::pair<int, double> p2 {6, 7.5};
    auto p3 = std::midpoint(p1, p2);
    std::cout << p3.first << " and " << p3.second << std::endl; // Output: 4 and 5.85
}

结果:

4
5.9
4 and 5.85

如示例中,midpoint()函数可以处理常规类型,以及自定义类型(如上面的std::pair)。需要注意的是,当传递给midpoint()函数的参数类型不同时,返回类型需要用common_type表示。

总结

midpoint()函数为C++ 20增加了一项新功能,将两个不同类型的值的中间值计算为同一类型的值。当涉及到自定义类型或数字类型的时候,这个函数可以派上用场。