2016-05-31 1 views
-1

Я предполагаю, что эта ситуация натолкнулась на каждого программиста, где мы можем использовать оператор сравнения '==', в моем случае ситуация такая: C++ pgmВыполнение оператора '==' с булевой переменной?

Код 1: Это было использовано во всех файлах, кроме конструктора

if(a==10) 
{ 
//do something; 
} 

, но я могу сделать то же самое, как описано выше со следующим образом я установить переменную Ьоо истина, когда переменная становится в самом конструкторе 10, т.е.

constructor_name() 
{ 
boolean variable_name=TRUE;//when a == 10; 
} 

тогда я использую следующий код в моем все файлы вместо кода 1,

код 3:

if(variable_name) 
{ 
//do same as first code 
} 

что лучше для производительности, код 1 или код 3.Я надеюсь, что я проиллюстрировал мой ситуация, чтобы вы могли понять. Пожалуйста, помогите мне. Спасибо заранее.

+1

Зависит от множества факторов, но для меня это выглядит как микро-оптимизация. [Является ли микро-оптимизация подходящей?] (Http://stackoverflow.com/questions/3470990/is-micro-optimization-worth-the-time) –

+1

Я очень сомневаюсь, что вы получите какую-то разницу в производительности , Просто напишите самый чистый код и пусть оптимизатор компилятора выполнит свою работу. – PaulMcKenzie

+0

Пропуская вопрос микро-оптимизации, здесь есть два больших неизвестных. Как часто эти объекты создаются? Как часто оценивается этот оператор if? –

ответ

2

Вы не должны микро-оптимизировать. Вы вряд ли заметите какую-либо разницу между вашей 2-й версией в производительности (возможно, вы сэкономите 1 процессорный цикл), но это не стоит времени и усилий, тем более что в наши дни процессоры очень быстры.

Только оптимизируйте, если вы профиль и найдите узкое место в своем коде.

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

Если вы написали это в рабочем коде, я уверен, что другие считают это заблуждение (я бы), и непонятно, почему вы положили isTen логическое в классе, вместо того, чтобы просто сравнивая значение с помощью operator==.

Кроме того, там может быть ошибка, если вы измените a outisde из конструктора 10, то isTen все равно будет false, но a это 10!

+0

значение ** a ** не будет изменено вне конструктора. И спасибо за ответ. – Anil

+0

@SubSea, но, возможно, это _will_, вы действительно не можете быть уверены, что произойдет в будущем :) – Rakete1111

-1

Я нашел ниже, что будет иметь значение,

рассмотрит переменную является целочисленным переменным и занимает 4 байт (при условии, 4 байта для межд), то компилятор должен выполнить Comparision 4 байта памяти где, поскольку переменная bool принимает 1 байта, я предполагаю, что это делает разницу в производительности.

+0

4-байтное целое будет просто 32-битным словом, которое можно сравнить в одной инструкции в 32-битной системе. Bool может даже быть реализован как полноценное слово, стандарт только говорит, что он должен быть «по крайней мере» байтом. – Ramon