Сегодня я преподавал пару друзей, как использовать 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 действительно работает! Что мне здесь не хватает?