为什么在int和long long int之间不能使用std :: min

问题描述

所以我只想知道为什么我不能在min和max函数中传递具有不同数据类型的值?

int a=7;
long long int b=5;
long long int c=min(a,b);
cout<<c;

之所以引起怀疑,是因为我确定编译器可以隐式地将类型从较小的datatype(int)转换为较大的数据类型(long long int),所以为什么编译器不能在此处进行类型转换!

解决方法

这取决于std::minstd::max的设计方式。

对于这两个参数,它们可以具有两种不同的类型,并使用类似std::common_type的方法来确定好的结果类型。但是相反,两个参数的类型相同,因此您传递的两个参数也必须具有相同的类型。

编译器可以隐式地将类型从较小的数据类型(int)转换为较大的数据类型(long long int)

是的,但是它也可以隐式地从long long转换回int。 (“ Cast”不是正确的词,它表示显式转换。)

规则是,当函数参数参与模板参数推导时,不允许对传递给该参数的参数进行隐式转换。推导规则已经被编译,允许一些隐式转换(即,转换为更宽泛的算术类型)会使它们变得更加复杂。

,

由于执行此操作时会丢失精度错误,因此它们是为int数据类型创建的,因此您无法传递long或类似float的错误。 您必须隐式转换它们。