微商城网站建设流程方案,长沙网站设计联系地址,胶州网站建设案例,wordpress 图片显示慢一、std::clamp()
其实在前面简单介绍过这个函数#xff0c;但当时只是一个集中的说明#xff0c;为了更好的理解std::clamp的应用#xff0c;本篇再详细进行阐述一次。std::clamp在C17中其定义的方式为#xff1a;
template class T
constexpr const T cl…一、std::clamp()
其实在前面简单介绍过这个函数但当时只是一个集中的说明为了更好的理解std::clamp的应用本篇再详细进行阐述一次。std::clamp在C17中其定义的方式为
template class T
constexpr const T clamp( const T v, const T lo, const T hi );
template class T, class Compare
constexpr const T clamp( const T v, const T lo, const T hi,Compare comp );说明文档中表明其使用“”(c20后使用less所以T必须可运算否则未定义)或自定义comp来实现。无论使用哪种实现其结果都是返回vlo~hi范围内或返回边界值接近于v的lo或 hi的引用。注意如果lo和hi不可比较则行为未定义。最简单的就是lohi行为即未定义。
二、应用
std::clamp的出现解决了一个很常见的问题就是判断范围。这个功能说大不大但用处非常多比较在实际中判断电压、电流的值判断亮度的值判断数值的域等等太多了。如果不使用它就需要自己用if语句来搞定没有难度就是少写多写几行代码的事儿。
#include algorithm
#include iostreamconstexpr int HI 1200;
constexpr int LO 1;
struct Worker{int id 0;bool operator (const Workerw)const{return id w.id;}
};
int CompFun(const Workerw1,const Workerw2){return w1.id w2.id;
}
int main()
{int v 16;std::clamp(v, LO, HI);Worker loW {LO};Worker hiW {HI};Worker p1;p1.id 10;std::coutuse compare func clamp value: std::clamp(p1, loW, hiW,CompFun).idstd::endl;Worker p2;p2.id 11;std::cout clamp value: std::clamp(p2,loW,hiW).idstd::endl;//std::cout clamp value: std::clamp(p2,hiW,loW).idstd::endl;return 0;
}
大家可以猜一下注释部分的结果再和说明比较即可明白。
三、分析说明
虽然std::clamp方便简单但在实践应用中还是需要和实际场景结合建议如下 1、基础类型的判断处理可以转移到此函数中 2、复杂的比较要看情况不一定非为了使用它搞一个小于运算符的重载 std::clamp之所以表现比较好主要原因是其内联调用相关函数对一些比较在底层进行了优化包括编译优化和CPU优化等。 不过从实际的经验来看std::clamp对提高效率并不是太大所以不需要盲目的应用特别是改写以前的比较代码。但在一些比较重视效率或控制代码的简洁程度上还是有很好的作用。
四、总结
AI在发展库也在发展会不会到最后大家只要碎碎念一下一个程序就出来这种不是没有可能。但是这种可能大概率可能需要相当长的时间。其实如果真到了那个地步为什么还要写程序机器人自己就搞定自己了。人类就享受一切即可。 不过到那时可能大多数人活得更不如意