С++ инициализирует анонимную структуру
Я все еще зарабатываю свои С++ крылья; Мой вопрос: если у меня есть такая структура:
struct Height
{
int feet;
int inches;
};
И у меня тогда есть несколько строк:
Height h = {5, 7};
Person p("John Doe", 42, "Blonde", "Blue", h);
Мне нравится инициализация структур через фигурные скобки, но я бы предпочел, чтобы это было в одной строке, в анонимной структуре Height. Как мне это сделать? Мой первоначальный наивный подход:
Person p("John Doe", 42, "Blonde", "Blue", Height{5,7});
Однако это не сработало. Я очень далеко от знака?
Ответы
Ответ 1
Вы не можете, по крайней мере, не в современном С++; инициализация скобки является частью синтаксиса инициализатора и не может использоваться в другом месте.
Вы можете добавить конструктор в Height
:
struct Height
{
Height(int f, int i) : feet(f), inches(i) { }
int feet, inches;
};
Это позволяет использовать:
Person p("John Doe", 42, "Blonde", "Blue", Height(5, 7));
К сожалению, поскольку Height
больше не является агрегатом, вы больше не можете использовать инициализацию скобки. Инициализация вызова конструктора также проста:
Height h(5, 7);
Ответ 2
Стандартный С++ (С++ 98, С++ 03) не поддерживает это.
Поддержка g++ - это языковое расширение, и я, похоже, помню, что С++ 0x будет поддерживать его. Вам нужно будет проверить синтаксис расширения языка g++ и/или, возможно, С++ 0x.
В настоящее время стандартный С++, просто укажите экземпляр Height
, как вы уже это сделали, затем используйте имя.
Приветствия и hth.,