Ошибки, баги, вопросы - страница 2889

 
A100:

Инициализировать нужно, но только осмысленным значением. В указанном примере такого значения нет, поэтому практика не плохая, единственно возможная. В противном случае была бы двойная инициализация

А что поменяется? если инициализировать

int f( int i ) { /*вычисления*/ }
void g( int k )
{
   for ( int i=0, j=0; i < k; i = j )
   {
      j = f( i );
      /*вычисления*/
   }
}       
 
Roman:

А что поменяется? если инициализировать

А почему нулем, а не j=333 допустим? Т.е. это бессмысленная инициализация, которая может скрыть трудноуловимую ошибку

 
A100:

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

Ели вам нужно отловить ошибку этого значения, ну и проинициализируйте её 333 ))
Это же только стартовое значение.

 
Roman:

Ели вам нужно отловить ошибку этого значения, ну и проинициализируйте её 333 ))
Это же только стартовое значение.

все правильно, это баг. Получается или мы даем предупреждение на присвоение не инициированных переменных во всех случаях, или тогда не даем, а инициим ее дефолтно нулем например, в рамках языка во всех так же случаях.

 
Valeriy Yastremskiy:

все правильно, это баг. Получается или мы даем предупреждение на присвоение не инициированных переменных во всех случаях, или тогда не даем, а инициим ее дефолтно нулем например, в рамках языка во всех так же случаях.

Только где в вышеприведенных примерах Вы увидели такие случаи?

 
A100:

Только где в вышеприведенных примерах Вы увидели такие случаи?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2020.10.27 16:11

Инициализировать нужно, но только осмысленным значением. В указанном примере такого значения нет, поэтому практика не плохая, единственно возможная. В противном случае была бы двойная инициализация

int f( int i ) { /*вычисления*/ }
void g( int k )
{
        for ( int i = 0, j; i < k; i = j )
        {
                j = f( i );
                /*вычисления*/
        }
}

 
Roman:

И где присвоение не инициированных переменных? Какая переменная не инициализирована? и кому она присваивается? То что Вы выделили: j от = слева j=, а не справа =j, т.е. она никому не присваивается до того как ей самой присвоено значение

 
A100:

Только где в вышеприведенных примерах Вы увидели такие случаи?

Да, погорячился, во всех случаях не иницилизированной переменной есть присвоение, а не наоборот. Возможно компилятор построчно сверху вниз идет, и тогда да, присвоение внизу, а вверху наоборот. Там же предупреждение возможно присвоение неинициинной переменной.

 
A100:

И где присвоение не инициированных переменных? Какая переменная не инициализирована? и кому она присваивается? То что Вы выделили j=, а не =j

Присвоение не инициализированной переменной, в теле цикла. До первой итерации j ещё не инициализирована. 
Она будет инициализирована после прохода первой итерации.
Сперва выполняется тело цикла, а потом область инкремента. Которая у вас заменена на i = j

 
Roman:

Присвоение не инициализированной переменной, в теле функции. До первой итерации j ещё не инициализирована. 
Она будет инициализирована после прохода первой итерации.
Сперва выполняется тело функции, а потом область инкремента. Которая у вас заменена на i = j

Не, все правильно, не инная j на первой итерации иницилизируется как раз j=f(i) а на второй только будет i=j Думаю компилятор сверху вниз парсит и дает предупреждения.