Сегодня я преподавал пару друзей, как использовать C struct
s. Один из них спросил, можете ли вы вернуть struct
из функции, на которую я ответил: "Нет! Вместо этого вы возвращаете указатели на динамически malloc
ed struct
."
Исходя из того, кто прежде всего С++, я ожидал, что не сможет вернуть struct
значениями. В С++ вы можете перегрузить 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
действительно работает! Что мне здесь не хватает?