Итерация с различными целочисленными типами - PullRequest
0 голосов
/ 13 августа 2010

Имеет ли значение, если я использую переменную типа short или char вместо int в качестве инициализатора цикла?

for (int i = 0; i < 10; ++i) {}

for (short i = 0; i < 10; ++i) {}

for (char i = 0; i < 10; ++i) {}

Или, может быть, нет никакой разницы?Может быть, я делаю вещи еще хуже, а эффективность снижается?Сохраняет ли использование другого типа память и увеличивает скорость?Я не уверен, но я предполагаю, что оператору ++ может потребоваться расширить тип, и в результате: замедлить выполнение.

1 Ответ

1 голос
/ 13 августа 2010

Это не будет иметь значения, о котором вам следует заботиться, при условии, что диапазон, который вы перебираете, соответствует выбранному вами типу.С точки зрения производительности, вы, вероятно, получите лучшие результаты, когда размер переменной итерации такой же, как собственный целочисленный размер платформы, но любой приличный компилятор оптимизирует его, чтобы использовать его в любом случае.На управляемой платформе (например, C # или Java) вы не знаете целевую платформу во время компиляции, и JIT-компилятор в основном свободен для оптимизации под любую платформу, на которой он работает.

Единственное, что вывозможно, стоит следить за тем, когда вы используете счетчик цикла для других вещей внутри цикла;изменение типа может изменить способ выполнения этих вещей, вплоть до того момента (по крайней мере, в C ++), что может быть вызвана другая перегрузка для функции или метода, потому что переменная цикла имеет другой тип.Примером может служить вывод переменной цикла через поток C ++, например: cout << i << endl;.Аналогично, тип переменной цикла может заражать неявные типы (под) выражений, которые ее содержат, и приводить к скрытым переполнениям в числовых вычислениях, например: int j = i * i;.

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