Когда хотите найти где-то что-то оптимальное, надо, прежде всего, сказать о критерии оптимальности!
Конечно о глобальной экономии памяти или достижение высокого быстродействия здесь речи быть не может. А вот текстовая запись программы действительно короче!
Конечно, кому-то не нравится такое сокращение, а кто-то уже привык к этому и писать в выражении два раза одну и ту же переменную уже не может, так как это просто раздражает.
Кстати если переменная представлена одним символом, то, конечно, экономия текста всего на 1 символ. А если в переменной несколько символов! ? Правильно говорить, что экономия текстовой записи происходит на длину переменной в символах.
Кстати, действительно, раньше это (размер текстовой части программы) было критично, но и сейчас, если кто-то желает распечатать программу для её анализа или др. , то компактность записи сбережёт не одно дерево! :)
Другие языки программирования и технологии
Что оптимальнее: a -= b или a = a - b ? [obj c]
о какой оптимизации речь? о том что на один символ меньше кода напечатаете? за кадром будут происходить те же самые действия.
вы не там оптимальности ищете.
оптимальность это когда повторяющийся код грамотно выделен в функции, когда грамотно и не перебарщивая определены глобальные переменные, когда не создаётся море одноразовых переменных на каждом шаге цикла. короче говоря, когда сперва разбираются в природе решаемой задачи, а потом только начинают кодировать.
оптимальность это когда, для примера, ради перемножения матриц вам не требуется писать вложенные циклы, а достаточно просто записать С = А * В и программа сама должна "оптимально" перемножить матрицы. к сожалению, такое дано далеко не всякому языку программирования.
вы не там оптимальности ищете.
оптимальность это когда повторяющийся код грамотно выделен в функции, когда грамотно и не перебарщивая определены глобальные переменные, когда не создаётся море одноразовых переменных на каждом шаге цикла. короче говоря, когда сперва разбираются в природе решаемой задачи, а потом только начинают кодировать.
оптимальность это когда, для примера, ради перемножения матриц вам не требуется писать вложенные циклы, а достаточно просто записать С = А * В и программа сама должна "оптимально" перемножить матрицы. к сожалению, такое дано далеко не всякому языку программирования.
Оптимизатор, вообще-то, должен уравнять.. . но a-=b - одно действие, а a=a-b - два.
раньше, когда процессоры были большими а производительность маленькой, эти конструкции (на моем опыте) компилировались по разному.
первый: вычитание с косвенной адресацией
второй: с загрузкой значения в аккумулятор и выгрузкой
т. е. 1й) вариант был быстрее и короче.
сейчас как уже написали это не имеет никакого значения, и результирующий код зависит от компилятора. оптимизировать надо bottleneck-и: циклы, вызовы, создание больших объектов. .
ну и 1й вариант более естественный для с++ по моему
первый: вычитание с косвенной адресацией
второй: с загрузкой значения в аккумулятор и выгрузкой
т. е. 1й) вариант был быстрее и короче.
сейчас как уже написали это не имеет никакого значения, и результирующий код зависит от компилятора. оптимизировать надо bottleneck-и: циклы, вызовы, создание больших объектов. .
ну и 1й вариант более естественный для с++ по моему
Первое, так как если я делаю класс и перегружаю оператор, то ни о каком присваивании (копировании) и речи не будет. А второе оператор идет через стек, по мне бы я вообще запретил такие операторы, так как это понятней человеку, но жутко не оптимально. По возможности всегда заменяйте длинное выражение на подобные операторы, особенно когда проектируете свой класс.
компилятору посрать, итоговый код будет одинаковый
фишка в том что первый компилятор Си писался для машины с 16Кб!!!! памяти, естественно текст программы должен был быть компактным a-=b на 1 байт короче чем a=a-b (пробелы тогда это ваще роскошь)
если у тебя 100 присваиваний то первый вариант даст экономию аж 100 байт, в то время это было очень много.
На сегодняшний момент, когда, оперативная память измеряется Гигабайтами, вариант a -= b не более чем дань моде. Многие чайники так пишут чтобы продемонстрировать свою "крутость", но потом запутываются в плохо читаемом коде и демонстрируют в итоге свою тупость
фишка в том что первый компилятор Си писался для машины с 16Кб!!!! памяти, естественно текст программы должен был быть компактным a-=b на 1 байт короче чем a=a-b (пробелы тогда это ваще роскошь)
если у тебя 100 присваиваний то первый вариант даст экономию аж 100 байт, в то время это было очень много.
На сегодняшний момент, когда, оперативная память измеряется Гигабайтами, вариант a -= b не более чем дань моде. Многие чайники так пишут чтобы продемонстрировать свою "крутость", но потом запутываются в плохо читаемом коде и демонстрируют в итоге свою тупость
Первое.
блин, это одно и тоже на низком уровне, но 1ое писать быстрее.
тут два абсолютно одинаково затрачивается память, все равно что написать 1+2 или 2+1, это может быть только визуально оптимальнее:)
а -= в конечно. Особенно в цикле выгодно
Похожие вопросы
- Уравнение a*x+b*y=c
- помогите составить таблицы истиности -А -> (B + C); (A B) * C; -A + -B + C; - (A + B) * C ; A * B _+ C; A B
- Паскаль! Даны векторы: a={xn}, b={yn}, c={zn}, d={dn}. Построить матрицу К, сторонами которой являются упорядочены в
- конъюнкция и дизъюнкция таблицы истинности как их решать? например (A∨B)^B ^A
- {(a,b), (c,b), (c,a)} - является транзитивным или нет?
- Как осуществить операцию сложения в с++ без операции присваивания ? int a=5; int b=6; int c=a+b; ( без "= ")
- срочно помогите написать программу на ассемблере вычисляющую R. R=x2+y2, где x=a+b-c, y=b*c-a. a,b,c вводятся с клавы
- Найти трехзначные числа a, b, c, все цифры которых различны и удовлетворяют уравнению a^2 – b^2 – c^2 = a – b – c.
- Может ли кирпич, имеющий форму прямоугольного параллепипеда с ребрами a,b,c, пройти через круглое отверстие радиуса R?
- Вопросик по Pascal. Есть переменные A,B,C,D. Как сделать так, чтобы при вводе A выводилось цифра 1, B - 2, C-3, D-4?