答:
直接返回结构体或类对象是不行的,大多数情况都是出错!
首先说明,不是编译不报错,就代表你没错!
你的代码的结构体足够简单,所以编译没问题,你的逻辑足够简单,所以运行结果没有出错,真的是你运气好!
原因如下:
1.如果你的结构体或类是复杂对象,编译就会报错,如果你的结构体或类继承自CObject,比如一个CDialog对象,你返回对象试试看。
2.如果你的结构体是一个接口,即包含纯虚函数(必须要子类实现的,不能实例化),那返回对象也会编译不通过。
3.你返回的对象和接收的对象不是同一个对象,这会造成拷贝开销,对于包含大量数据的对象是应该避免这种拷贝开销。
4.返回的对象和接收的对象不是同一个对象,这是逻辑问题,那就说明你的使用仅限于查看,不能修改,因为不是同一个对象,修改无效。
5.你这种直接返回对象的使用方法,必须要求函数返回指定的结构体对象,不能返回NULL或者0,否则编译不能通过。那么你必须在接收端判断,接收的对象是否有效。
6.同理,不能使用继承,也就是不能返回这个结构体的子类,否则编译不能通过。
在C#里面,基本上都是你这种写法,因为C#没有指针概念,这种写法就是传址,是对的。在C++里面,这种写法就是传值,只有简单情况才是不会出错。