Можно ли сделать следующее с auto в C ++ 0x? - PullRequest
8 голосов
/ 17 декабря 2010

Эрик Липперт написал статью о Почему нет переменных на полях? в C #. Мне было любопытно, сможем ли мы сделать это в C ++ 0x? напр.

struct mystruct_t
{
   auto i = 0, d = 0.0, s = std::string("zero");
};

Я не смог найти ответ в последнем черновике, извините.

Спасибо

1 Ответ

12 голосов
/ 17 декабря 2010

К сожалению, вы не можете. Спецификация говорит в 7.1.6.4/3 и следует

В противном случае тип переменной определяется из ее инициализатора. Имя объявленной переменной не должно появляться в выражении инициализатора. Такое использование auto допускается при объявлении переменных в блоке (6.3), в области пространства имен (3.3.6) и в выражении for-init-Statement (6.5.3).

Автоматический спецификатор типа также можно использовать при объявлении переменной в условии оператора выбора (6.4) или оператора итерации (6.5) в seq-spec-spec-type-type в new-type-id или типе -id нового выражения (5.3.4) в объявлении for-range и в объявлении статического члена данных с помощью фигурной скобки-или-равно-инициализатора, который появляется в спецификации члена определения класса (9.4) 0,2).

Программа, которая использует auto в контексте, явно не разрешенном в этом разделе, неверна.

Я не уверен, почему они запрещают auto для нестатических элементов данных, это было бы очень удобно.

...