C++ 智能抑制错误最大值(大小,整数)

C++ 智能抑制错误最大值(大小,整数),c++,C++,我有很多代码调用max(int,size\u t); 有没有更聪明的方法来抑制这个错误 这有点傻,因为它与max(int,0)一起工作 我可以这样做:size\u t I=0 #include <algorithm> int main() { size_t i = 2; size_t m = std::max(i, size_t(2)); // size_t m = std::max(i, 2); error: no matching function for call

我有很多代码调用max(int,size\u t); 有没有更聪明的方法来抑制这个错误

这有点傻,因为它与max(int,0)一起工作

我可以这样做:
size\u t I=0

#include <algorithm>

int main()
{
  size_t i = 2;
  size_t m = std::max(i, size_t(2));
  // size_t m = std::max(i, 2); error: no matching function for call to 'max(size_t&, int)'

}
#包括
int main()
{
尺寸i=2;
尺寸m=std::max(i,尺寸t(2));
//size\u t m=std::max(i,2);错误:调用“max(size\t&,int)”时没有匹配的函数
}

通常我更喜欢
std::max(I,2)
;它有一个类似的效果(实际上,它要好一点,因为没有显式的强制转换,这可能会使更有趣的警告静音),并避免了参数列表的混乱

另一种方法是编写自己的
max
,它接受不同类型的参数并返回“正确”的公共类型(类似于使用宏执行):

模板
自动我的最大值(T,U)->取消类型(1?T:U){
返回t>u?t:u;
} 

除了强制转换(使用
静态\u强制转换
非功能样式强制转换)之外,您还有几个选项。如前所述,将
i
更改为int,提供一个显式模板参数
max(i,2)
,您还可以使用无符号长文本
max(i,2UL)
(这假设系统上的大小为无符号长)C++没有提供一个文字后缀,它会告诉编译器“代码> 2”/代码>应该有类型<代码> siZeSt,所以这个转换可能是你能做的最好的事情(除非你想把那个<代码> 2代码>变成一个命名常量-另一种选择)。出于这种目的,函数式或C风格的强制转换比笨重的
静态强制转换更合适@AnT:嗯,还有
大小运算符“”\st(unsigned long long x){return x;}
。只是没有预定义的后缀。
template<typename T, typename U>
auto my_max(T t, U u) -> decltype(1?t:u){
    return t>u?t:u;
}