我想知道为什么在min和max函数中无法传递不同数据类型的值。
int a=7;
long long int b=5;
long long int c=min(a,b);
cout<<c;
我的疑问是因为我知道编译器可以将较小的数据类型(int)隐式转换为较大的数据类型(long long int),所以为什么编译器在这里不能进行类型转换呢?
我想知道为什么在min和max函数中无法传递不同数据类型的值。
int a=7;
long long int b=5;
long long int c=min(a,b);
cout<<c;
这取决于 std::min
和 std::max
的设计。
它们本可以为两个参数设置不同的类型,然后使用类似std::common_type
的东西来确定出一个好的结果类型。但是它们却采用了相同的类型作为两个参数,这就要求你传递的两个参数必须具有相同的类型。
编译器可以将小数据类型(int)隐式转换为大数据类型(long long int)
是的,但它也可以从 long long
隐式地转换回 int
。(“转换”不是正确的单词,它意味着显式转换。)
规则是,当函数参数参与模板参数推导时,不允许对传递给该参数的参数进行任何隐式转换。推导规则已经很复杂了,允许一些隐式转换(例如到更宽的算术类型)会使其变得更加复杂。
因为精度丢失错误会在这种情况下发生,它们是为 int
数据类型设计的,因此您不能传递 long
或类似 float
的数据类型。
您必须进行隐式转换。
std::min
是一个函数模板,它不是“为int而制作的”。 - UnholySheep