关于返回和参数类型的混乱

Confusion about return and parameter types

本文关键字:参数 类型 混乱 于返回 返回      更新时间:2023-10-16

我真的是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,它是否会自动从长时间到int施放返回结果?我真的不明白这里发生了什么。

使用所谓的常规算术转换用于参数。类型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参数的函数定义为已删除。

c 允许某些类型之间的隐式转换。所有数值内置类型均可互相转换,因此编译器可以自由进行INT/Long/Short/Short/Long及其未签名的等效之间的任何转换。有关类型转换的更多信息,请参见CPPReference