我对c ++很陌生,刚刚尝试了一些代码,而且我似乎并没有真正得到的东西:
#include<iostream>
using namespace std;
int f (const long& i) {
return i+1;
}
void g (long& i) {
f (i);
}
int main () {
long la = 0;
int a = 0;
int b = f (a);
long c = f (7);
la = f (la);
cout << "la = " << la << " a = " << a << endl;
cout << "b = " << b << " c = " << c << endl;
}
所以我没有得到:为什么函数f接受int类型的变量? a显然不是很长,但它仍然接受它。我不明白。另外,由于f的返回类型是int,它是否会自动将返回结果从long转换为int?我真的不明白这里发生了什么。
答案 0 :(得分:1)
C ++允许在某些类型之间进行隐式转换。所有数字内置类型都可以相互转换,因此编译器可以在int / long / short / long long和它们的无符号等价物之间进行任何转换。有关类型转换的详细信息,请参阅cppreference
答案 1 :(得分:1)
对于参数,使用了所谓的通常的算术转换。 int
类型的对象被隐式转换为类型long
,因为类型long
的排名大于类型int
的排名。这是long
类型的对象可以容纳int
类型的任何值。
对于返回类型,可以获得无效结果,因为类型int
的对象不一定能够容纳long
类型的值。
考虑到如果你不希望函数接受int类型的对象作为参数,你可以定义相应的函数,并将int
类型的参数删除。
例如
#include <iostream>
int f (const long& i) {
return i+1;
}
int f( const int & ) = delete;
int main()
{
int a = 0;
f( a );
return 0;
}
程序无法编译,因为带有int
类型参数的函数被定义为已删除。