+ = Оператор в С++
Кто-нибудь, пожалуйста, сообщите мне разницу между следующими кодами, которые добавляют две переменные типа данных int
. Я хочу знать, какой из них лучше.
Код A:
sum = sum + value;
Код B:
sum += value;
Обычно мы предпочитаем оператор ++
над += 1
. Есть ли какая-то конкретная причина этого?
Я хочу знать разницу между приведенными выше кодами в отношении соглашений или уровня эффективности. Какой из них рекомендуется?
Ответы
Ответ 1
В то время как конечный результат, например, Оператор someVar++
такой же, как someVar += 1
, в игре есть и другие вещи.
Давайте рассмотрим простую инструкцию типа
foo = bar++;
Он фактически эквивалентен (но не равен) значению
temp = bar;
bar += 1;
foo = temp;
Что касается операторов приращения и сокращения префиксов и суффиксов, у них есть другое приоритет оператора, который будет влиять на такие вещи, как арифметика указателя с использованием этих операторов.
Что касается разницы между
foo += 1;
и
foo = foo + 1;
для примитивных типов (например, int
или float
) или типов указателей не существует различий, но существует очень большая разница, если foo
- объект с перегрузкой оператора. Тогда
foo += 1;
равно
foo.operator+=(1);
а
foo = foo + 1;
равно
temp = foo.operator+(1);
foo.operator=(temp);
Семантически очень большая разница. Практически также, особенно если какая-либо из функций перегрузки оператора имеет побочные эффекты, или если конструктор-копир или деструктор имеют некоторые побочные эффекты (или вы забываете правила из трех, пяти или нулей).
Ответ 2
Один оператор вызывает =
и +
оператор последующих вызовов +=
.
Операторы ++
и +=
являются предпочтительными из-за удобочитаемости - большинство программистов знают, что они означают.
С другой стороны, большинство современных компиляторов будут генерировать тот же код для += 1
как ++
и +
/=
как +=
для встроенных типов;
Но для пользовательских class
s будут вызваны фактические операторы, и это будет реализовано разработчиком этих class
, чтобы понять все это. В этих случаях ++
и +=
могут быть оптимальными.
Ответ 3
cout << sum++;
Выведет значение суммы до того, как оно будет увеличено. Кроме того, в зависимости от того, что вы делаете, вы можете перезаписать операторы +=
и +
.
Ответ 4
Когда вы сворачиваете код, вы уменьшаете вероятность ошибки (типографская ошибка или логическая ошибка).
Используя
sum += value;
вы уменьшаете вероятность - хоть немного - ошибка при вводе
sum = sum + value;
То же самое с value++;
value += 1;
легче смутить с помощью
value += l;
где l - переменная....
Его больше о согласованности в том, что речь идет о правильном или неправильном, но сокращение кода является основным преимуществом для удобства обслуживания.
Следует проявлять осторожность с учетом работы операторов, однако в сложных утверждениях.
Ответ 5
В показанном случае нет особых причин предпочесть один метод увеличения значения над другим, за исключением, возможно, для целей удобочитаемости. В этом случае я думаю, что я бы предпочел sum += value
over sum = sum + value
, поскольку он немного более короткий и (я думаю) более ясный, но YMMV на этом.
Что касается предпочтительности ++
over += 1
, (IMO снова) ++
является предпочтительным, когда приращение значения является частью выражения, например. sum += array[index++]
- но если все, что делается, добавляет значение к значению, которое я бы предпочел index += 1
. Но позвольте этому взглянуть, многое из этого - личное предпочтение и выбор момента выбора. Я всегда пытаюсь написать то, что, на мой взгляд, самый простой и понятный код, но я должен признать, что, когда я вернусь и прочитаю часть своего собственного кода, у меня будет больше "Что я думаю?"? " моментов, которые я хотел бы признать.: -)
YMMV.
Желаем удачи.
Ответ 6
Коды A и B делают то же самое. Преимущество использования кода B состоит в том, что он быстрее набирается и читается легче.
Как и для оператора ++
над += 1
, он снова читается. Хотя есть разница между foo++
и ++foo
. Первое сначала считывается, а затем увеличивается, а второе увеличивается с первого раза, а затем считывается с.
Ответ 7
Совокупное выражение присваивания формы E1 op= E2
эквивалентно to E1 = (T)((E1) op (E2))
, где T
- тип E1
, за исключением того, что E1
оценивается только один раз.
Пример, приведенный в Java + =, - =, * =,/= операторов присваивания
[...] правильный код:
short x = 3;
x += 4.6;
и приводит к тому, что x имеет значение 7, потому что оно эквивалентно:
short x = 3;
x = (short)(x + 4.6);
Ответ 8
В основном это одно и то же. Его оба оператора.
Один из них вызывает =
и +
. А другой +=
..
Итак, если вы сделали значение + = 5. Значение увеличивается на 5. + = лучше и более организованно. И сокращает ваш кодекс, лучше и более профессионально.
Ответ 9
Нет никакой разницы между этими двумя функциями. A + = B на самом деле означает A = A + B. Первый - это всего лишь более короткий способ записи второго.
Ответ 10
Оба они одинаковы до этого, оба могут использоваться для увеличения значения переменной (сохраненной в ней).
x++
будет увеличивать значение x
на один (1) каждый период выполнения.
+=
добавляет правый операнд в левый операнд и сохраняет результат в левом операнде.
Что-то вроде следующего:
C += A
точно так же, как C = C + A
Разница между ++
и +=
заключается в том, что первая может увеличиваться только на один (1), а +=
может быть увеличена более чем на одну строку.
например:
x += 1; // will increment by 1 every run time
x += 4; // will increment by 4 every run time
x += 10; // will increment by 10 every run time