为什么c ++编译器在对两种不同类型的数字变量使用`std :: max()`函数时会给出错误

Ali*_*Ali 3 c++ compiler-errors max

std::max()函数中使用两种不同的数字变量类型时,c ++编译器是否有任何原因导致错误?(例如intlong)。

我的意思是这样的:“有时在将std::max()函数用于两种不同的数字变量类型时会遇到此问题,因此编译器会给出错误以防止出现此问题”。

AnT*_*AnT 6

编译器产生错误,因为它无法对的模板参数执行类型推导std::max。这就是std::max声明模板的方式:两个参数使用相同的类型(模板参数)。如果参数具有不同的类型,则推论变得模棱两可。

如果您通过显式提供模板参数来解决推导模糊性,则可以使用其他类型作为std::max参数

std::max(1, 2.0); // Error
std::max<double>(1, 2.0); // OK
Run Code Online (Sandbox Code Playgroud)

std::max@bolov的答案描述了为什么坚持为其参数使用公共类型(而不是使用两个独立的类型)的原因:该函数实际上要返回对最大值的引用