powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пятничный бунт
25 сообщений из 73, страница 2 из 3
Пятничный бунт
    #39272088
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima Tпропущено...

Если не путаю: видеокодеки вообще воплощают в железе. Я к тому что это не то пример чтобы сравнивать ОСы и ЯП.
Ну а если завтра будет устаканен H266 то нам придется выкинуть на свалку наши Смарт-Телевизоры.
И выкинем. Сомневаешься? У отца в саду приставка для приема цифрового ТВ. Буквально сегодня разбирался почему не показывает, олимпиада на носу, смотреть надо, отказалось стандарт DVB-T умер, DVB-T2 прошивками не лечится, надо железо менять.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272091
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дай бох. Главное чтоб мы не спутали в одну кучу дедлайн техподдержки и техническую
возможность обновить firmware.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272101
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kmaytonМне с самого начала не нравится что плавает сам предмет спора. Оба полюса мнений
касаются С++ и С++. Хотя по сути спор идёт в разрезе С++ и Процессор шаблонов в С++.
По сути все нарекания касаются не самого С++ а его ПРОЦЕССОРА ШАБЛОНОВ
и ЮЗКЕЙСОВ которые были созданы на его базе за всю историю существования языка.

Хочется спросить. Ну если не процессор шаблонов то ЧТО ?

А мне кажется что коллеги Siemargl и
Anatoly Moskovsky и тд по топику берут формулы
вычисления площади абстрактной дыры абстракции из разных справочников и доказывают друг другу
чья формула круче...
Скорее вопрос в другом - чем каждый из нас готов пожертвовать во имя абстракции.
С Джоелем я согласен.
Anatoly Moskovskyд0k,
Все в рамках темы ))

Но вообще конечно реальных альтернатив С++ не существует.
Иначе бы при таком количестве ворчунов все они на эти альтернативы уже бы перешли.
Но вместо этого они ходят по С++ форумам и плачутся, как им трудно с С++
А они и перешли.
Объемы софта выросли, требуется более высокий уровень абстракции.
Сервер-сайд теперь Ява, клиент - дНет (или Ява или Веб), вебсервисы на всяком скриптовом говне.

Но в определенной области С++ можно заменить только на С++ без STL, или просто С или на С--.
Alibek B.Siemarglполминуты на запуск апплета "yuotube"
и еще секунд 15 до этого на загрузку панельки апплетов
Андроид тут не причем.
У тебя просто слабая аппаратная начинка для используемого апплета YouTube.
У меня на телефоне когда-то давно YT запускался почти мгновенно. А теперь запускается секунд 10, а потом еще минуту видео идет с лагами. Телефон один и тот же, просто сам YouTube обновился и для комфортной работы требует более мощное железо.
Так что проблема с долгим запуском YouTube решается (на пару лет) заменой телевизора на современный.
Просто я не куплю себе ни телевизор этого же производителя ни андроид-телефон (еще и с огромной дырой в безопасности).
Не собираюсь платить за некачественный (тормозной) код.

Андроид у меня в ТВ скорее всего 4.х, т.к модель 2014г
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272116
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tотказалось стандарт DVB-T умер
а мужики то и не знают
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272117
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglА они и перешли.
Объемы софта выросли, требуется более высокий уровень абстракции.
Сервер-сайд теперь Ява, клиент - дНет (или Ява или Веб), вебсервисы на всяком скриптовом говне.
Это все изначально на этом ширпотребе было ))
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272124
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbSiemargltypedef'у нужно выучить написать те же самые требуемые типы.
непонимание. Там ты один раз тип определяешь как шаблон, потом ты забываешь про тип, который в шаблоне использовал. Хотя я что-то не догоняю точно, у меня не было проблем с "запоминанием" типа шаблона, так как он получается из головы по контексту. о__о
Смартпойнтеры приходится использовать из-за неконтролируемого процесса копирования внутрях. Без них будет копироваться по значению - еще "лучше". Вместе с move() это как раз костыли, подпирающие абстракцию, просто не чугунные а алюминиевые.
можно же определить конструктор копирования и оператор присваивания.
Ок, давай попробуем засунуть более-менее сложный класс с запрещенными конструктором и деструктором куда нибудь, например в set и пробежаться меняющим алгоритмом.ну если не присваивать прям экземпляры класса, то всё ок должно быть?
Собрал простенький примерчик, да - move помогает.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
using namespace std;
#include <list>
#include <algorithm>
#include <iostream>
#include <string>
#include <sstream>
#include <utility>

class noCopyable
{
	string value;
public:
//	noCopyable(const noCopyable&) = delete; // Part1 works with this
	noCopyable(const noCopyable &b)
		{ 
			value = b.value;
			cout << "Called noCopyable copiin" << endl; 
		};  // shows calls, needed for copy list

	noCopyable(noCopyable&& b) : value(std::move(b.value)) 
	{ cout << "Moved noCopyable.. " << endl; }  // move constructor

//	noCopyable& operator = (const noCopyable&) = delete; // // Part1 works with this
	noCopyable& operator = (const noCopyable &b) 
	{ 
		value = b.value; 
		cout << "Called noCopyable assign" << endl; 
	} // needed for copinn list contens


	noCopyable(int x) { stringstream out; out << x; value = out.str(); }
	
	string getS() const {return value; }
	string& setS(string s) {return value = s; }

};

class Usual
{
	string value;
public:
	Usual(int x) { stringstream out; out << x; value = out.str(); }

	string getS() const {return value; }
};

int main()
{
	// Part1. create, iterate, modify
	// this works fine
	list<Usual> usuals;
	typedef list<Usual>::const_reference Uiter;
	usuals.push_front(1);
	usuals.push_front(2);
	usuals.push_front(3);

	for_each(usuals.begin(), usuals.end(), [](Uiter i){cout << i.getS() << ", "; } );
	cout << endl;
		
	// non copiable object wont work
    noCopyable canCreate(7); // <--- OK

	list<noCopyable> nocopies;
	typedef list<noCopyable>::reference Niter;

// no one push below works without copy __or move__ constructor
	nocopies.push_front(std::move(canCreate));
	nocopies.push_front(8);
	nocopies.push_front(9);
	cout << "nocopies formed." << endl;

	// print list
	for_each(nocopies.begin(), nocopies.end(), [](Niter i){cout << i.getS() << ", "; } );
	cout << endl;

	// modify list
	for_each(nocopies.begin(), nocopies.end(), [](Niter i){ i.setS(i.getS() + "+1"); } );

	// print list
	for_each(nocopies.begin(), nocopies.end(), [](Niter i){cout << i.getS() << ", ";});
	cout << endl;

	// Part2. Copy list. need copy constructor && assignment op
	list<noCopyable> nc2;
	nc2.assign(nocopies.begin(), nocopies.end());
	// print list1
	for_each(nocopies.begin(), nocopies.end(), [](Niter i){cout << i.getS() << ", ";});
	cout << endl;
	// print list2
	for_each(nc2.begin(), nc2.end(), [](Niter i){cout << i.getS() << ", ";});
	cout << endl;
		
	return 0;
}


вывод
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
>gcc -std=c++11 nocopySTL.cpp -lstdc++
>a.exe
3, 2, 1,
Moved noCopyable..
Moved noCopyable..
Moved noCopyable..
nocopies formed.
9, 8, 7,
9+1, 8+1, 7+1,
Called noCopyable copiin
Called noCopyable copiin
Called noCopyable copiin
9+1, 8+1, 7+1,
9+1, 8+1, 7+1,

...
Рейтинг: 0 / 0
Пятничный бунт
    #39272195
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока из недовольных новыми фичами, а так понимаю, только те, кто не до конца разобрался в них.

std::move не костыль, а нормальное решение. я так понимаю, если точно знаешь, что есть такой конструктор, то можно написать вместо std::move(some) static_cast<some_type&&>(some). с помощью этой фукции ты обозначаешь место ,в котором ты хочешь переместить объект, что дальне ты его не будешь использовать, только уничтожишь. без этого по умолнчанию ты копируешь (и это логично). то есть это место все равно как-то нужно обозначить. конечно, компилятор может и сам догадаться иногда, но лучше если ты имеешь способ явно это обозначить.

можно пример когда применение шаблона замедляет рантайм.

на счет примера с return 42, то всегда, и без шаблонов, можно нагородить кучу кода, чтобы сделать что-нибудь простое. это как бы... шаблоны тут не причем.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272227
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ого, пока писал перевалило на следующюю страницу:)
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272242
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexy_blackпока из недовольных новыми фичами, а так понимаю, только те, кто не до конца разобрался в них.

std::move не костыль, а нормальное решение. я так понимаю, если точно знаешь, что есть такой конструктор, то можно написать вместо std::move(some) static_cast<some_type&&>(some). с помощью этой фукции ты обозначаешь место , в котором ты хочешь переместить объект ,


Зачем ?

alexy_blackчто дальне ты его не будешь использовать, только уничтожишь. без этого по умолнчанию ты копируешь (и это логично).


Тем более зачем кудато перемещать обьект перед удалением?

alexy_black то есть это место все равно как-то нужно обозначить. конечно, компилятор может и сам догадаться иногда, но лучше если ты имеешь способ явно это обозначить.


Я вобще не понимаю,
вы говорите о менеджере витуальной памяти
и перетягиваете на себя одеяло у расработчиков ОС,
или о жонглировании сылками и указателями...
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272437
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kЗачем ?
Тем более зачем кудато перемещать обьект перед удалением?

Затем, что если ты не хочешь копировать, а переместить объект. И не удалять его после копирования переноса. Т.о. не перед удалением, а вместо удаления.

Но можешь этого и не делать, а копировать, как и раньше, никто не запрещает. Просто если хочется сделать move, теперь это возможно.

д0kЯ вобще не понимаю,
вы говорите о менеджере витуальной памяти
и перетягиваете на себя одеяло у расработчиков ОС,
или о жонглировании сылками и указателями...
Мы говорим о более широких возможностях работы с объектами, виртуальная память тут ни при чём.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272469
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMbд0kЗачем ?
Тем более зачем кудато перемещать обьект перед удалением?

Затем, что если ты не хочешь копировать, а переместить объект. И не удалять его после копирования переноса. Т.о. не перед удалением, а вместо удаления.

Но можешь этого и не делать, а копировать, как и раньше, никто не запрещает. Просто если хочется сделать move, теперь это возможно.

д0kЯ вобще не понимаю,
вы говорите о менеджере витуальной памяти
и перетягиваете на себя одеяло у расработчиков ОС,
или о жонглировании сылками и указателями...
Мы говорим о более широких возможностях работы с объектами, виртуальная память тут ни при чём.


Я не понимаю вашей парадигмы написания кода на С++.

В моей парадигме мувить обьекты значит дефрагментировать память,
это системная операция по оптимизации использваония ресурсов.

вот что в моей парадигме значит мувить.....

Парадигма std::move еще больше повышает планку на старт вхождения в ЯП,
что снижает количество его носителей и ареал комерческого применения.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272489
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kВ моей парадигме мувить обьекты значит дефрагментировать память,
это системная операция по оптимизации использваония ресурсов.
Я также понял как CEMb:
CEMbЗатем, что если ты не хочешь копировать, а переместить объект. И не удалять его после копирования переноса. Т.о. не перед удалением, а вместо удаления.
Суть в том чтобы оптимизировать код когда создается объект, тут же копируется (например при помещении его в STL контейнер) и оригинал более не используется, т.е. объект сразу создается в контейнере и мы избавляемся от этого лишнего копирования.

Я тут прочитал
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272499
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tд0kВ моей парадигме мувить обьекты значит дефрагментировать память,
это системная операция по оптимизации использваония ресурсов.
Я также понял как CEMb:
CEMbЗатем, что если ты не хочешь копировать, а переместить объект. И не удалять его после копирования переноса. Т.о. не перед удалением, а вместо удаления.
Суть в том чтобы оптимизировать код когда создается объект, тут же копируется (например при помещении его в STL контейнер) и оригинал более не используется, т.е. объект сразу создается в контейнере и мы избавляемся от этого лишнего копирования.

Я тут прочитал

Вариантов то всего 2.100500

1. передача через стек в алокатор контейнера . (Описанный вами случай)
2. Хранение в контейнере сслыки обьекта находящегося на куче.
2.100500. Велосипеды с меморимапед файлами и разделяемой памятью.


Какой % случаев гарантированно покрывает std::move ?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272509
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
19396698

Джоэл СполскиВсе нетривиальные абстракции дырявы


поведения std::move нельзя назвать тривильаным...
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272510
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kКакой % случаев гарантированно покрывает std::move ?
"перемещение" не очень удачный термин, вводит в заблуждение, память ведь не ящики на складе, где можно ящик на другую полку переместить.
http://www.ozon.ru/context/detail/id/34747131/ 5.1. Азы std::move и std::forward

Полезно подойти к std::move и std::forward с точки зрения того, чего они не делают. std::move ничего не перемещает. std::forward ничего не передает. Во время выполнения они не делают вообще ничего. Они не генерируют выполнимый код - ни одного байта. std::move и std::forward являются всего лишь функциями (на самом деле - шаблонами функций), которые выполняют приведения. std::move выполняет безусловное приведение своего аргумента к rvalue, в то время как std::forward выполняет приведение только при соблюдении определенных условий. Это все. Пояснения приводят к новому множеству вопросов, но, по сути, история на этом завершена.
...
Т.е. суть в том что по возможности объект сразу создается там где будет жить, по невозможности - создание на стэке и копирование.
Почитай книжку, хорошо написано, я не настолько силен в плюсах чтобы связно повторить.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272525
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kКакой % случаев гарантированно покрывает std::move ?
std::move разрешает компилятору считать явно объявленную переменную временной (чье значение программисту не интересно больше).
Это компайл-тайм директива, позволяющая компилятору проводить более глубокую оптимизацию, за счет замены копирования на перемещение, там где это копирование было бы без этой директивы, потому что компилятор не всегда может отследить что переменная больше не используется в коде.
Что тут не понятно-то?
Причем тут эти ваши аллокаторы и прочая виртуальная память?

Если такие элементарные вещи по-вашему поднимают порог вхождения в С++, то может не мучаться и заняться чем-то другим, ну там на бейсике что-ли писать?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272536
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, всё Димыч. Пора нам с тобой на пенсию.

Или в дев-опсы. А?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272578
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovskyд0kКакой % случаев гарантированно покрывает std::move ?
std::move разрешает компилятору считать явно объявленную переменную временной (чье значение программисту не интересно больше).
Это компайл-тайм директива, позволяющая компилятору проводить более глубокую оптимизацию, за счет замены копирования на перемещение, там где это копирование было бы без этой директивы, потому что компилятор не всегда может отследить что переменная больше не используется в коде.
Что тут не понятно-то?
Причем тут эти ваши аллокаторы и прочая виртуальная память?

Если такие элементарные вещи по-вашему поднимают порог вхождения в С++, то может не мучаться и заняться чем-то другим, ну там на бейсике что-ли писать?

Для меня элементарными вещами есть чистоплотность работы
и областями видимости.
Основопологающий принципы языка С++

обьявление - есть инициализация, выход из области видимости - деинициализация.

При соблюдиии этого фундаментального правила
я не вижу надобности std::move и прочих
абстрактных фильтраторах мусора.
Чисто не там где убирают , а там где не сорят.

Сваливание в кучу всего с перекладыванием отвественности
на компилятор , типа пусть от области видимости отслеживает
ничем хорошим для проекта на С++ не закончится , инфа сотка... :)
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272597
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kПри соблюдиии этого фундаментального правила
я не вижу надобности std::move и прочих
Если нет надобности в оптимизациях, то зачем вам вообще С++?

д0kЧисто не там где убирают , а там где не сорят.
Нет. Чисто там где убирают.
Но к std::move мусор не имеет отношения.
Когда вы вводите переменную - это не бросание мусора, а наоборот повышение читаемости кода.
В хорошем коде очень часто промежуточные значения записываются в переменные, вместо того чтобы нагромождать все в одно гигантское выражение. А часто алгоритм явно предусматривает цепочку действий над переменной, тогда отказаться от переменной нельзя без усложнения алгоритма.
Для тех кто не хочет жертвовать производительностью ради читаемости и простоты алгоритма, и предназначен std::move.

Но вы судя по всему пока так и не поняли что он делает, так что думаю обсуждать нужен ли он пока нет смысла ))
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272610
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyНо вы судя по всему пока так и не поняли что он делает, так что думаю обсуждать нужен ли он пока нет смысла ))

Я не понял или пропустил , когда в С++ было введено
использованное Вами выше понятие временной переменной...

Это шо за термин такой, кто определяет время ее жизни ?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272617
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kЯ не понял или пропустил , когда в С++ было введено
использованное Вами выше понятие временной переменной...

Это шо за термин такой, кто определяет время ее жизни ?
Этот термин я использовал чтобы не повышать порог вхождения в этот топик )))
Впрочем сам термин "temporary object" естественно описан в стандарте С++ с незапамятных времен. См. п.12.2 стандарта С++ (любого).
А вы если действительно хотите разобраться, то читайте про rvalue (с практической точки зрения это почти аналог temporary)
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272686
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima T, всё Димыч. Пора нам с тобой на пенсию.
Не, мне не пора. Хотя денег больше чем достаточно и был жизненный план в 40 уйти на пенсию, уже почти 40, но пока морально не готов. Дети вырастут (это еще 10-15 лет) и тогда брошу все нах и займусь садоводством где-нибудь в южной части страны (КавМинВоды очень нравятся). Жена уже занялась садоводством, не успеваем съедать урожаи гороха
Так что пока изучаю всякую хрень неизученную ранее от C# до генерации primes такая вот развлекуха
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272718
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyд0kКакой % случаев гарантированно покрывает std::move ?
std::move разрешает компилятору считать явно объявленную переменную временной (чье значение программисту не интересно больше).
Это компайл-тайм директива, позволяющая компилятору проводить более глубокую оптимизацию, за счет замены копирования на перемещение, там где это копирование было бы без этой директивы, потому что компилятор не всегда может отследить что переменная больше не используется в коде.
Что тут не понятно-то?
...Ну не совсем так просто. Заглянем в душу

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
#include <utility>
#include <string>
using namespace std;

class A {
	string member;
public:
	A(): member("Dory"){};
	A(A&& arg); 	// Simple move assignment operator
	A(A& arg); 	// copy
	A& operator=(A&& other);
};

A::A(A&& arg): member(std::move(arg.member)) // the expression "arg.member" is lvalue
{} 

A::A(A& arg): member(arg.member) // cpy
{} 

A& A::operator=(A&& other) 
{
   	member = std::move(other.member);
   	return *this;
}

void fingingDory()
{
	A dory; 
	A copydory(dory);
}



Результат

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
std_move.o:     file format pe-i386


Disassembly of section .text:

00000000 <__ZN1AC1EOS_>:
	A(A&& arg); 	// Simple move assignment operator
	A(A& arg); 	// copy
	A& operator=(A&& other);
};

A::A(A&& arg): member(std::move(arg.member)) // the expression "arg.member" is lvalue
   0:	55                   	push   ebp
   1:	89 e5                	mov    ebp,esp
   3:	83 ec 28             	sub    esp,0x28
   6:	89 4d f4             	mov    DWORD PTR [ebp-0xc],ecx
   9:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
   c:	89 04 24             	mov    DWORD PTR [esp],eax
   f:	e8 00 00 00 00       	call   14 <__ZN1AC1EOS_+0x14>
  14:	89 c2                	mov    edx,eax
  16:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
  19:	89 14 24             	mov    DWORD PTR [esp],edx
  1c:	89 c1                	mov    ecx,eax
  1e:	e8 00 00 00 00       	call   23 <__ZN1AC1EOS_+0x23>
  23:	83 ec 04             	sub    esp,0x4
{} 
  26:	c9                   	leave  
  27:	c2 04 00             	ret    0x4

0000002a <__ZN1AC1ERS_>:

A::A(A& arg): member(arg.member) // cpy
  2a:	55                   	push   ebp
  2b:	89 e5                	mov    ebp,esp
  2d:	83 ec 28             	sub    esp,0x28
  30:	89 4d f4             	mov    DWORD PTR [ebp-0xc],ecx
  33:	8b 55 08             	mov    edx,DWORD PTR [ebp+0x8]
  36:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
  39:	89 14 24             	mov    DWORD PTR [esp],edx
  3c:	89 c1                	mov    ecx,eax
  3e:	e8 00 00 00 00       	call   43 <__ZN1AC1ERS_+0x19>
  43:	83 ec 04             	sub    esp,0x4
{} 
  46:	c9                   	leave  
  47:	c2 04 00             	ret    0x4

0000004a <__ZN1AaSEOS_>:

A& A::operator=(A&& other) 
{
  4a:	55                   	push   ebp
  4b:	89 e5                	mov    ebp,esp
  4d:	83 ec 28             	sub    esp,0x28
  50:	89 4d f4             	mov    DWORD PTR [ebp-0xc],ecx
   	member = std::move(other.member);
  53:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  56:	89 04 24             	mov    DWORD PTR [esp],eax
  59:	e8 00 00 00 00       	call   5e <__ZN1AaSEOS_+0x14>
  5e:	89 c2                	mov    edx,eax
  60:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
  63:	89 14 24             	mov    DWORD PTR [esp],edx
  66:	89 c1                	mov    ecx,eax
  68:	e8 00 00 00 00       	call   6d <__ZN1AaSEOS_+0x23>
  6d:	83 ec 04             	sub    esp,0x4
   	return *this;
  70:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
}
  73:	c9                   	leave  
  74:	c2 04 00             	ret    0x4

00000077 <__Z11fingingDoryv>:

void fingingDory()
{
  77:	55                   	push   ebp
  78:	89 e5                	mov    ebp,esp
  7a:	57                   	push   edi
  7b:	56                   	push   esi
  7c:	53                   	push   ebx
  7d:	83 ec 6c             	sub    esp,0x6c
  80:	c7 45 bc 00 00 00 00 	mov    DWORD PTR [ebp-0x44],0x0
  87:	c7 45 c0 06 00 00 00 	mov    DWORD PTR [ebp-0x40],0x6
  8e:	8d 45 c4             	lea    eax,[ebp-0x3c]
  91:	8d 5d e8             	lea    ebx,[ebp-0x18]
  94:	89 18                	mov    DWORD PTR [eax],ebx
  96:	ba ed 00 00 00       	mov    edx,0xed
  9b:	89 50 04             	mov    DWORD PTR [eax+0x4],edx
  9e:	89 60 08             	mov    DWORD PTR [eax+0x8],esp
  a1:	8d 45 a4             	lea    eax,[ebp-0x5c]
  a4:	89 04 24             	mov    DWORD PTR [esp],eax
  a7:	e8 00 00 00 00       	call   ac <__Z11fingingDoryv+0x35>
	A dory; 
  ac:	8d 45 e4             	lea    eax,[ebp-0x1c]
  af:	c7 45 a8 ff ff ff ff 	mov    DWORD PTR [ebp-0x58],0xffffffff
  b6:	89 c1                	mov    ecx,eax
  b8:	e8 00 00 00 00       	call   bd <__Z11fingingDoryv+0x46>
	A copydory(dory);
  bd:	8d 45 e0             	lea    eax,[ebp-0x20]
  c0:	8d 55 e4             	lea    edx,[ebp-0x1c]
  c3:	89 14 24             	mov    DWORD PTR [esp],edx
  c6:	c7 45 a8 01 00 00 00 	mov    DWORD PTR [ebp-0x58],0x1
  cd:	89 c1                	mov    ecx,eax
  cf:	e8 56 ff ff ff       	call   2a <__ZN1AC1ERS_>
  d4:	83 ec 04             	sub    esp,0x4
  d7:	8d 45 e0             	lea    eax,[ebp-0x20]
  da:	89 c1                	mov    ecx,eax
  dc:	e8 00 00 00 00       	call   e1 <__Z11fingingDoryv+0x6a>
  e1:	8d 45 e4             	lea    eax,[ebp-0x1c]
  e4:	89 c1                	mov    ecx,eax
  e6:	e8 00 00 00 00       	call   eb <__Z11fingingDoryv+0x74>
  eb:	eb 25                	jmp    112 <__Z11fingingDoryv+0x9b>
  ed:	8d 6d 18             	lea    ebp,[ebp+0x18]
  f0:	8b 45 ac             	mov    eax,DWORD PTR [ebp-0x54]
  f3:	89 45 a0             	mov    DWORD PTR [ebp-0x60],eax
  f6:	8d 45 e4             	lea    eax,[ebp-0x1c]
  f9:	89 c1                	mov    ecx,eax
  fb:	e8 00 00 00 00       	call   100 <__Z11fingingDoryv+0x89>
 100:	8b 45 a0             	mov    eax,DWORD PTR [ebp-0x60]
 103:	89 04 24             	mov    DWORD PTR [esp],eax
 106:	c7 45 a8 ff ff ff ff 	mov    DWORD PTR [ebp-0x58],0xffffffff
 10d:	e8 00 00 00 00       	call   112 <__Z11fingingDoryv+0x9b>
 112:	8d 45 a4             	lea    eax,[ebp-0x5c]
 115:	89 04 24             	mov    DWORD PTR [esp],eax
 118:	e8 00 00 00 00       	call   11d <__Z11fingingDoryv+0xa6>
 11d:	8d 65 f4             	lea    esp,[ebp-0xc]
 120:	5b                   	pop    ebx
 121:	5e                   	pop    esi
 122:	5f                   	pop    edi
 123:	5d                   	pop    ebp
 124:	c3                   	ret    
 125:	90                   	nop
 126:	90                   	nop
 127:	90                   	nop

Disassembly of section .text$_ZN1AC1Ev:

00000000 <__ZN1AC1Ev>:
using namespace std;

class A {
	string member;
public:
	A(): member("Dory"){};
   0:	55                   	push   ebp
   1:	89 e5                	mov    ebp,esp
   3:	57                   	push   edi
   4:	56                   	push   esi
   5:	53                   	push   ebx
   6:	83 ec 6c             	sub    esp,0x6c
   9:	89 4d d4             	mov    DWORD PTR [ebp-0x2c],ecx
   c:	c7 45 b8 00 00 00 00 	mov    DWORD PTR [ebp-0x48],0x0
  13:	c7 45 bc 00 00 00 00 	mov    DWORD PTR [ebp-0x44],0x0
  1a:	8d 45 c0             	lea    eax,[ebp-0x40]
  1d:	8d 5d e8             	lea    ebx,[ebp-0x18]
  20:	89 18                	mov    DWORD PTR [eax],ebx
  22:	ba 70 00 00 00       	mov    edx,0x70
  27:	89 50 04             	mov    DWORD PTR [eax+0x4],edx
  2a:	89 60 08             	mov    DWORD PTR [eax+0x8],esp
  2d:	8d 45 a0             	lea    eax,[ebp-0x60]
  30:	89 04 24             	mov    DWORD PTR [esp],eax
  33:	e8 00 00 00 00       	call   38 <__ZN1AC1Ev+0x38>
  38:	8d 45 e7             	lea    eax,[ebp-0x19]
  3b:	89 c1                	mov    ecx,eax
  3d:	e8 00 00 00 00       	call   42 <__ZN1AC1Ev+0x42>
  42:	8b 45 d4             	mov    eax,DWORD PTR [ebp-0x2c]
  45:	8d 55 e7             	lea    edx,[ebp-0x19]
  48:	89 54 24 04          	mov    DWORD PTR [esp+0x4],edx
  4c:	c7 04 24 01 00 00 00 	mov    DWORD PTR [esp],0x1
  53:	c7 45 a4 01 00 00 00 	mov    DWORD PTR [ebp-0x5c],0x1
  5a:	89 c1                	mov    ecx,eax
  5c:	e8 00 00 00 00       	call   61 <__ZN1AC1Ev+0x61>
  61:	83 ec 08             	sub    esp,0x8
  64:	8d 45 e7             	lea    eax,[ebp-0x19]
  67:	89 c1                	mov    ecx,eax
  69:	e8 00 00 00 00       	call   6e <__ZN1AC1Ev+0x6e>
  6e:	eb 25                	jmp    95 <__ZN1AC1Ev+0x95>
  70:	8d 6d 18             	lea    ebp,[ebp+0x18]
  73:	8b 45 a8             	mov    eax,DWORD PTR [ebp-0x58]
  76:	89 45 9c             	mov    DWORD PTR [ebp-0x64],eax
  79:	8d 45 e7             	lea    eax,[ebp-0x19]
  7c:	89 c1                	mov    ecx,eax
  7e:	e8 00 00 00 00       	call   83 <__ZN1AC1Ev+0x83>
  83:	8b 45 9c             	mov    eax,DWORD PTR [ebp-0x64]
  86:	89 04 24             	mov    DWORD PTR [esp],eax
  89:	c7 45 a4 ff ff ff ff 	mov    DWORD PTR [ebp-0x5c],0xffffffff
  90:	e8 00 00 00 00       	call   95 <__ZN1AC1Ev+0x95>
  95:	8d 45 a0             	lea    eax,[ebp-0x60]
  98:	89 04 24             	mov    DWORD PTR [esp],eax
  9b:	e8 00 00 00 00       	call   a0 <__ZN1AC1Ev+0xa0>
  a0:	8d 65 f4             	lea    esp,[ebp-0xc]
  a3:	5b                   	pop    ebx
  a4:	5e                   	pop    esi
  a5:	5f                   	pop    edi
  a6:	5d                   	pop    ebp
  a7:	c3                   	ret    

Disassembly of section .text$_ZSt4moveIRSsEONSt16remove_referenceIT_E4typeEOS2_:

00000000 <__ZSt4moveIRSsEONSt16remove_referenceIT_E4typeEOS2_>:
   *  @param  __t  A thing of arbitrary type.
   *  @return The parameter cast to an rvalue-reference to allow moving it.
  */
  template<typename _Tp>
    constexpr typename std::remove_reference<_Tp>::type&&
    move(_Tp&& __t) noexcept
   0:	55                   	push   ebp
   1:	89 e5                	mov    ebp,esp
    { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
   3:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
   6:	5d                   	pop    ebp
   7:	c3                   	ret    

Disassembly of section .text$_ZN1AD1Ev:

00000000 <__ZN1AD1Ev>:
#include <utility>
#include <string>
using namespace std;

class A {
   0:	55                   	push   ebp
   1:	89 e5                	mov    ebp,esp
   3:	83 ec 18             	sub    esp,0x18
   6:	89 4d f4             	mov    DWORD PTR [ebp-0xc],ecx
   9:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
   c:	89 c1                	mov    ecx,eax
   e:	e8 00 00 00 00       	call   13 <__ZN1AD1Ev+0x13>
  13:	c9                   	leave  
  14:	c3                   	ret    
  15:	90                   	nop
  16:	90                   	nop
  17:	90                   	nop



Что показывает, что конструктор копирования и конструктор перемещения не особо то отличаются. И в целом, шаблонная математика suxx
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272720
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не желая пугать неокрепшие умы, я не буду выкладывать оптимизированный код.

Поверьте мне на слово, на чистом С этот пример в десяток раз будет короче.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272723
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТак что пока изучаю всякую хрень неизученную ранее от C# до генерации primes такая вот развлекуха
Давай курить архитектуры HighLoad MMORPG игрух в вебе. Там есть весь спектр задач.

Мне вот щас нужен мультиплексированный I/O. Без него сервер невзлетит.
...
Рейтинг: 0 / 0
25 сообщений из 73, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пятничный бунт
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]