今天我教了几个朋友如何使用C struct
s.其中一个问你是否可以struct
从一个函数返回一个函数,我回答说:"不!你会返回指向动态malloc
编辑struct
的指针."
来自主要使用C++的人,我期望无法struct
按值返回s.在C++中,您可以operator =
为对象重载并完全理解为具有按值返回对象的函数.但是,在C中,你没有那个选项,所以它让我思考编译器实际上在做什么.考虑以下:
struct MyObj{
double x, y;
};
struct MyObj foo(){
struct MyObj a;
a.x = 10;
a.y = 10;
return a;
}
int main () {
struct MyObj a;
a = foo(); // This DOES work
struct b = a; // This does not work
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么struct b = a;
不能工作 - 你不能operator =
为你的数据类型重载.它是如何a = foo();
编译罚款?这是否意味着什么struct b = …
虽然它非常方便,但我很少(如果有的话)遇到在C 中返回struct
s(或union
s)的函数,无论它们是动态链接函数还是静态定义函数.
它们通过指针参数返回数据.
(Windows中的动态示例是GetSystemInfo
.)
这背后的原因是什么?
是因为性能问题,ABI兼容性问题还是其他问题?