Сегодня я учил пару друзей, как использовать C struct
s. Один из них спросил, можете ли вы вернуть struct
из функции, на что я ответил: «Нет! Вы бы вместо этого указывали бы динамически malloc
ed struct
s».
Исходя из того, кто в основном работает на 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;
}
Я понимаю, почему struct b = a;
не должен работать - вы не можете перегрузить operator =
для вашего типа данных. Как получается, что a = foo();
прекрасно компилируется? Значит ли это что-то отличное от struct b = a;
? Может быть, вопрос, который нужно задать: что именно делает оператор return
в сочетании со знаком =
?
[править]: Хорошо, я только что указал struct b = a
- синтаксическая ошибка - это правильно, и я идиот! Но это делает это еще сложнее! Использование struct MyObj b = a
действительно работает! Что мне здесь не хватает?