C ++ передает аргумент типа «struct» в качестве ссылки (&) или передает его по значению

0

У меня есть следующая функция в C++:

Family whoAmI(Family myFam,string MyName, int MyAge)
{
    myFam.Name = MyName;
    myFam.Age = MyAge;
    return myFam;
}

Он возвращает struct этого типа:

struct Family
{
    string Name;
    int Age;
};

Мой вопрос в том, что: я хочу, чтобы моя функция возвращала определенный тип struct который в нашем примере представляет собой " Family, но для указания типа возвращаемой функции я должен сначала объявить структуру, и применить ее как тип возврата функции, например: Family whoAmI() {..}. Затем я должен добавить значения в функцию к struct которая в конечном итоге похожа на Family. Это означает, что мне нужно повторно объявить аналогичную struct в самой функции (что довольно много памяти). То, что я сделал, это передать ссылку struct на функцию, чтобы предотвратить дублирование struct в функции. Теперь, это правильно? Поскольку он занимает место в аргументах и тем самым делает его менее удобным.

Теперь я называю это следующим образом:

Family x;
Family result = whoAmI(x, "Mostafa", 25);
  • 2
    Почему бы просто не сделать это конструктором Family ?
  • 2
    Ваш код выглядит так, как будто вы ищете конструктор.
Показать ещё 1 комментарий
Теги:
struct

1 ответ

4
Лучший ответ

Используйте конструктор.

struct Family {
  Family(const std::string& Name, int Age) 
    : Name(Name), Age(Age) {}

  std::string Name;
  int Age;
};

// use like:
Family me{"AName", 45}; // or Family me("AName", 45); on old compilers
  • 0
    отлично. Благодарю. Могу я спросить, почему вы объявили std:string& as const ?
  • 0
    @MostafaTalebi Аргумент является ссылкой на постоянный объект. Постоянный, так как вы не собираетесь изменять его, используйте ссылку, чтобы избежать копирования.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню