Временная путаница объектов - PullRequest
7 голосов
/ 07 декабря 2010

Посмотрите на этот фрагмент кода

struct S{ int i; int j;};

int main()
{
   assert(S().i ==  S().j) // is it guaranteed ?
}

Почему?

Ответы [ 3 ]

10 голосов
/ 07 декабря 2010

это гарантировано?

Да, это гарантировано.Значения S().i и S().j будут 0.() подразумевает инициализацию значения. (это означает, что i и j будут инициализироваться нулями, поскольку S - это класс без определяемого пользователем конструктора по умолчанию)

0 голосов
/ 07 декабря 2010

Технически, да. Они будут инициализированы в 0 (по крайней мере при не отладочной сборке для большинства компиляторов. Компилятор Visual Studio обычно инициализирует неинициализированные переменные для определенного шаблона в отладочных сборках) .

Однако, если вы сидели в обзоре кода, не удивляйтесь, если вас кричат ​​на то, что вы не явно инициализировали свои переменные.

0 голосов
/ 07 декабря 2010

Из стандарта C ++ ISO / IEC 14882: 2003 (E), пункт 3.6.2

Объекты со статической продолжительностью хранения (3.7.1) должны быть инициализированы нулем (8.5) перед любой другой инициализациейимеет место.

Так что это верно, поскольку обе переменные инициализируются нулями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...