📜  C++ 17中的std :: clamp(1)

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

C++ 17中的std::clamp

在C++ 17中,引入了std::clamp函数,该函数用于将一个值限制在一个特定的范围内。它非常有用,并且让开发者能快速而简单地对值进行限制,而不需要手工写一堆if-else语句。

函数原型
template <typename T>
constexpr const T& clamp(const T& value, const T& low, const T& high);
参数
  1. value:需要限制的值。
  2. low:限制的最小值。
  3. high:限制的最大值。
返回值

限制后的值,类型和第一个参数的类型相同。

例子
整数类型
#include <iostream>
#include <algorithm>

int main() {
    int a = 10, b = 5, c = 15;
    int clamped_a = std::clamp(a, b, c);
    std::cout << clamped_a << std::endl;

    int clamped_b = std::clamp(a, c, b);
    std::cout << clamped_b << std::endl;

    int clamped_c = std::clamp(c, a, b);
    std::cout << clamped_c << std::endl;

    return 0;
}

输出:

10
10
10
小数类型
#include <iostream>
#include <algorithm>

int main() {
    double a = 2.5, b = 5.0, c = 10.0;
    double clamped_a = std::clamp(a, b, c);
    std::cout << clamped_a << std::endl;

    double clamped_b = std::clamp(a, c, b);
    std::cout << clamped_b << std::endl;

    double clamped_c = std::clamp(c, a, b);
    std::cout << clamped_c << std::endl;

    return 0;
}

输出:

5
5
5
注意事项
  1. 该函数只可用于可比较的类型,也就是说需要实现了小于号( < )。
  2. 第二三个参数需要满足 low <= high,否则函数将不起作用。
  3. 该函数在编译时即可完成执行,所有参数都需要是编译时常量。如果输入的参数不是编译时常量,则会导致编译错误。
总结

std::clamp是一个非常方便的函数,可以避免繁琐的if-else语句。在编写C++ 17的程序时,我们应该充分利用std::clamp函数来提高代码的可读性和可维护性。