📅  最后修改于: 2023-12-03 15:29:49.095000             🧑  作者: Mango
在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增加了一项新功能,将两个不同类型的值的中间值计算为同一类型的值。当涉及到自定义类型或数字类型的时候,这个函数可以派上用场。