Подтвердить что ты не робот

'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 

Я знаю, что инициализация переменной выполняется быстрее, чем ее назначение. Почему люди предпочитают первого более позднего?

4b9b3361

Ответ 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 ) одно и то же, поскольку в обоих случаях переменные создаются до первой итерации цикла.