【发布时间】:2012-03-28 00:37:55
【问题描述】:
今天我正在教几个朋友如何使用 C structs。其中一个人问你是否可以从函数中返回struct,我回答说:“不!你应该动态地返回指向malloced structs 的指针。”
来自主要使用 C++ 的人,我期望无法按值返回 structs。在 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;
}
我明白为什么struct b = a; 不应该工作——你不能为你的数据类型重载operator =。 a = foo(); 怎么编译得很好?它是否意味着 struct b = a; 以外的其他东西?或许要问的问题是:return 语句与= 符号结合起来究竟有什么作用?
【问题讨论】:
-
struct b = a;是语法错误。如果您尝试struct MyObj b = a;会怎样? -
@GregHewgill:你完全正确。然而,非常有趣的是,
struct MyObj b = a;似乎确实有效:)
标签: c