我看源码的时候,经常可以看到在一个函数的前面,就是在本身应该在放void,int这种的地方,却出现了指针,结构体,类等的东西。
我也承认我学的不扎实(我自学的,不服咬我),但是书里面确实也没有见过。
如果函数有返回值,那么return 语句返回值的类型必须和函数的返回类型相同,或者可以隐式转换成函数的返回类型。
函数调用,其实就是开辟函数栈帧,函数栈帧回退的过程(后期写博文)。因此,当返回子函数中局部变量和指针或者引用时,该函数的局部变量已经成为非法访问的内存,故而会出错。所以,规定不能返回局部对象的引用和指针。
函数的返回值不能是数组或函数类型,但可以是指向数组或函数的指针。
C++函数的返回值是局部变量时,该返回值可能是值类型、指针类型和引用类型。
形参的类型决定了形参和实参交互的方式。
如果形参是引用类型,它将绑定到对应的实参上;否则,将实参的值拷贝后赋给形参。
指针的行为和其他非引用类型一样。当执行指针拷贝操作时,拷贝的是指针的值。拷贝之后,两个指针是不同的指针。因为指针使我们可以间接地访问它所指的对象,所以通过指针可以修改它所指对象的值。
void reset(int *p)
{
*p = 0;//改变了指向的对象的值
p = 0;//只改变了p的局部拷贝,实参未改变
}
pass by reference
void reset(int &p){}
int GetInt()
{
int value=10;
return value;
}
int ret1 = GetInt();
//值可以成功返回
int &ret2 = GetInt();
//错误 ret想定义为返回值的引用,但是此时返回值是字面值,需要定义成const 引用
int *ret3 = &GetInt();
//()优先级高。所以是取返回值的地址。但是返回值是以寄存器的方法带出,无法获取其地址。
typedef struct
{
int price;
}Food;
Food GetFood()
{
Food food = { 10 };
return food;
}
Food ret2 = GetFood(); //值可以成功返回
Food &ret3 = GetFood();//自定义类型,函数返回值,需要对其进行引用。编译器自动生成一个临时量。
Food *ret3 = &GetFood();//由于编译器自动生成了一个临时量,所以可以对该临时量取地址?
C++的基本数据类型限制了函数的返回类型,其不像Python一样可以直接返回一个list,list里面可以包含多个想要返回的内容。为了能够让C++的函数返回类型也可以不受数量上限制,我们可以先定义一个我们希望的数据类型的类或者结构体。如果使用类的话,该类当中只包含成员变量和构造函数。
这个是自定义的返回值类型
设计一个函数,然后返回值的类型设计为这个类
接下来再看,完成了这个转换
结构体的转换
偷了一张图过来,值得返回类型就是这3种
返回值为值类型时。使用临时对象(temporary object)来保存函数的返回值。函数的返回值用于初始化调用点的一个临时对象,该临时对象就是函数调用的结果。其返回值为右值。不能作为左值。
再放一张
这里就又蚌湖住了,这个是一个
简单的总结一下:
C++,狗都不学(呜呜呜,我是狗)
————————————————
版权声明:本文为CSDN博主「赶路人儿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liuxiao723846/article/details/104825422
https://zhuanlan.zhihu.com/p/358177643
https://blog.csdn.net/weixin_41232202/article/details/94066776
————————————————
版权声明:本文为CSDN博主「laola的故事」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013266600/article/details/78378279
联系客服