Подтвердить что ты не робот

+ = Оператор в С++

Кто-нибудь, пожалуйста, сообщите мне разницу между следующими кодами, которые добавляют две переменные типа данных int. Я хочу знать, какой из них лучше.

Код A:

sum = sum + value;

Код B:

sum += value;

Обычно мы предпочитаем оператор ++ над += 1. Есть ли какая-то конкретная причина этого?

Я хочу знать разницу между приведенными выше кодами в отношении соглашений или уровня эффективности. Какой из них рекомендуется?

4b9b3361

Ответ 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