'int я = 0' vs. 'int я (0)' в цикле 'for' (назначение vs для инициализации переменной count)
Я видел много кода в учебниках и на форумах, что люди используют оператор присваивания над инициализацией в цикле for
, чтобы начать повторение. Например,
for ( int i = 0; i < 5; ++i ) // common
for ( int i(0); i < 5; ++i ) // uncommon
Я знаю, что инициализация переменной выполняется быстрее, чем ее назначение. Почему люди предпочитают первого более позднего?
Ответы
Ответ 1
Оба int i = 0;
и int i(0);
объявляют, определяют и инициализируют объект int
со значением 0
в С++. Они строго эквивалентны, так же как и две петлевые конструкции. Обратите внимание, что в C, int i(0);
не является разрешенной конструкцией.
Ответ 2
Вы упомянули две формы инициализации: -
T t = u; _1
T t(u); _2
_1
Это может быть связано с двумя вызовами. Один из них был бы для конструктора преобразования, а другой - для копирования конструктора. Хотя большинство компиляторов могут исключить конструкцию копирования.
_2
Для этого потребуется только один вызов конструктора преобразования.
Итак, _2 предпочтительнее _1. Что касается встроенных типов, это не будет иметь большого значения.
Ответ 3
Вы можете написать так же, как:
int i(5);
или
int i{5};
или
int i=5;
Все это инициализация - не назначение.
* И они не разные.
Ответ 4
В языке программирования C вы должны сначала определить переменные и инициализировать их. Чтобы выполнить цикл for, вам нужно будет определить переменную в начале функции и только затем записать for( i=0 ; i<5 ; ++i )
. Таким образом, люди, которые часто используют этот язык, могут не использоваться для этого типа назначения, возможно на С++, или просто не хотят путать возможных начинающих читателей.
Однако, в С++, используя
for( int i=0 ; i<5 ; ++i )
и for ( int i(0); i < 5; ++i )
одно и то же, поскольку в обоих случаях переменные создаются до первой итерации цикла.