Остерегайтесь определенной «разумной атрибуции», потому что из-за отсутствия контекста часто являются источниками ложного мифа.ОП пометил сообщение как C, так и C ++.
Теперь K & R могут быть полубогами об истории C, но, безусловно, не могут считаться авторитетом в C ++.Кроме того, оптимизация компилятора может играть фундаментальную роль в C ++, но часто рассматривается программистами системы C как «оскорбительная» (им нравится рассматривать C как «Ассемблер с выражениями», а не как «язык высокого уровня»).
Сегодняшние компиляторы с большой вероятностью будут генерировать точно такой же код (это легко проверить), и использование одного или другого - гораздо больше вкус , чем другого.
В этом смысле я склоняюсь к предпочтению for(;;)
, потому что я легко могу прочитать его как " навсегда ", в то время как while(true)
читается как ", в то время как эта истинная вещь истинна ", заставляя вас понять, как, если это даже может быть ложным ...2 месяца мозга впустую!(Но это личное мнение: я знаю многих людей, которые должны больше думать о for(;;)
, чем while(true)
)
Однако я также могу распознать их обоих как «изобразительное представление» (фактически не читаятекст, просто смотря, как они выглядят через фотографическую память), указывающий на ту же интеллектуальную концепцию (оставайтесь здесь, пока кто-то не выгонит вас изнутри).
О предупреждении MS, иногда оно спасает вас от плохо написанноговыражения (например, true||a
).Но явно злоупотребляет, и не должно появляться, для тривиальных выражений без операции внутри.В обоих случаях компилятор MS выдает одинаковый машинный код.Возможно, обратная связь с MS сделает их менее утомительными по поводу этого предупреждения в будущих выпусках.