Инициализируйте и возвратите структуру в одной строке в C++

Действительно ли это возможно?

Я знаю, что можно инициализировать структуры с помощью синтаксиса списка.

IE

struct Foo f = { a, b, c};
return f;

возможное должно сделать это в одной строке, как Вы были бы с классами и конструкторами?

Спасибо

12
задан John C 20 June 2010 в 17:45
поделиться

2 ответа

Если вы хотите, чтобы ваша структура оставалась POD , используйте функцию, которая ее создает:

Foo make_foo(int a, int b, int c) {
    Foo f = { a, b, c };
    return f;
}

Foo test() {
    return make_foo(1, 2, 3);
}

В C ++ 0x равномерная инициализация устраняет необходимость в этой функции:

Foo test() {
    return Foo{1, 2, 3};
    // or just: 
    return {1, 2, 3};
}
27
ответ дан 2 December 2019 в 03:38
поделиться

Создайте конструктор для структуры (как класс) и просто выполните

return Foo(a,b,c);

Изменить : просто для пояснения: структуры в C ++ похожи на классы с той незначительной разницей, что их разрешение доступа по умолчанию является общедоступным (а не частным, как в классе). Поэтому вы можете создать конструктор очень просто, например:

struct Foo {
  int a;
  Foo(int value) : a(value) {}
};
14
ответ дан 2 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: