问题描述
所以我只想知道为什么我不能在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::min
和std::max
的设计方式。
对于这两个参数,它们可以具有两种不同的类型,并使用类似std::common_type
的方法来确定好的结果类型。但是相反,两个参数的类型相同,因此您传递的两个参数也必须具有相同的类型。
编译器可以隐式地将类型从较小的数据类型(int)转换为较大的数据类型(long long int)
是的,但是它也可以隐式地从long long
转换回int
。 (“ Cast”不是正确的词,它表示显式转换。)
规则是,当函数参数参与模板参数推导时,不允许对传递给该参数的参数进行隐式转换。推导规则已经被编译,允许一些隐式转换(即,转换为更宽泛的算术类型)会使它们变得更加复杂。
,由于执行此操作时会丢失精度错误,因此它们是为int
数据类型创建的,因此您无法传递long
或类似float
的错误。
您必须隐式转换它们。