Форум программистов, компьютерный форум CyberForum.ru

Постфиксные и префиксные *менты - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нужно переписать программы из паскаля на Си++ http://www.cyberforum.ru/cpp-beginners/thread593208.html
Программы из теории автоматов 1) Program Automat; Uses Crt; Var sym_term:array of string; sym_not_term:array of string; N,N0,N1:array of string; k,i:integer; {k - peremannaja cycle!!!!}
C++ здраствуйте.можете написать любую программу с защитой массива и пользовательским манипулятором подойдет любая..главное эти чтоб были. http://www.cyberforum.ru/cpp-beginners/thread593188.html
Измерение используемой памяти C++
Подскажите функцию в Windows в помощью которой можно измерить объем памяти используемой во время выполнения программы
Унаследованный деструктор C++
Если класс имеет родителя, у которого есть деструктор, то нужно ли в деструкторе класса вызывать родительский деструктор ? Пример: class A { private: char* str; public:
C++ Вычислить значение выражения http://www.cyberforum.ru/cpp-beginners/thread593166.html
Заменить в этой программе функцию на #include "stdafx.h" #include "conio.h" #include "stdlib.h" #include<iostream> #include <math.h> #define EPSILON 0.00001 using namespace std;
C++ Морской Бой, С++, консоль #include<iostream> #include <Windows.h> #include <conio.h> #include<ctime> //Макрос для режима установки кораблей "Игрок" #define Manual_a switch(k){\ case 'a':\ if(kj>1&&gamer==1){\ kj-=1;\ подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
01.06.2012, 11:41     Постфиксные и префиксные *менты
a+=b - не сокращённый вариант, а прямой.
C++
1
a+=
не сложение + присваивание, а увеличение, так как операция add помещает результат тоже в один из своих операндов. В результате
C++
1
a=a+b;
делается так:
1. создать вспомогательную переменную c.
2. скопировать a в c.
3. выполнить c+=b.
4. скопировать c в a.
5. уничтожить с.
Это эквивалентно
C++
1
a+=b;
, но треубет лишних операций по сохранению ещё одного регистра в стек и восстановлению из стека, а по сравнению с самим текстом
C++
1
2
3
4
{int c;
c=a;
c+=b;
a=c;}
именно a=a+b - сокращённая запись. Но ничего общего с оптимизацией это не имеет, так как компиляторы в состоянии самостоятельно заменить
C++
1
a=a+b
на
C++
1
a+=b;
А с другой стороны если внутреннее представление типа достаточно сложно, например, если это комплексное число в тригонометрической форме, то внутри оператора увеличения заводится локальная переменная, которую так уже не соптимизиурешь. Тогда всё наоборот и += реализуется с помощью + и =.

Добавлено через 2 минуты
Цитата Сообщение от Lordif Посмотреть сообщение
b = ++a;
а это действительно только сокращение, заменяется на
C++
1
2
3
4
{
 ++a;
 b=a;
}
.

Добавлено через 1 минуту
C++
1
b=a++;
на
C++
1
2
3
4
{
 b=a;
 a++;
}
Добавлено через 2 минуты
+= для встроенных типов составным оператором сложения и присваивания только называется, так как с точки зрения человека из неделимых состоит действительно из двух, не считая адресации. Но на низком уровне это часто не так. Ну и для некоторых пользовательских типов это может соответствовать особенностям внутренней реализации.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru