Сегодня я учил пару друзей, как использовать C structs. Один из них спросил, можете ли вы вернуть a structиз функции, на что я ответил: «Нет! Вместо этого вы бы возвращали указатели для динамически mallocсоздаваемых 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действительно работает! Что мне здесь не хватает?
struct MyObj b = a;кажется, работает :)
struct b = a;это синтаксическая ошибка Что если ты попробуешьstruct MyObj b = a;?