определение типизированных постоянных чисел в C / C ++ - PullRequest
2 голосов
/ 07 февраля 2012

В C / C ++, есть ли разница между высказыванием (1U) против ((unsigned int)1)?Я предпочитаю второй, но меня беспокоит, что второй может быть приведен к типу во время выполнения (т. Е. Дополнительные циклы процессора), тогда как первый получает правильный тип при компиляции.Спасибо.

Ответы [ 3 ]

5 голосов
/ 07 февраля 2012

Они не эквивалентны. 1U действительно в директивах #if предварительной обработки. (unsigned int)1 - синтаксическая ошибка на уровне препроцессора. Однако вы можете сделать его (unsigned)+1, и он будет действителен в препроцессоре, но только из-за неясного правила, которое мало кто знает ..

1 голос
/ 07 февраля 2012

Я думаю, вы поняли это правильно. (1U) Я подозреваю, что лексический анализ компилятора распознает «unsigned», в то время как (unsigned int) 1 будет операцией времени выполнения. Как говорится в комментариях, скорее всего, он все равно будет оптимизирован для вас.

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

* гарантия недействительна в дни, заканчивающиеся на Y.

0 голосов
/ 07 февраля 2012

11 символов. В противном случае они эквивалентны.

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