Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 15.04.2016, 14:27   #131
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
выше рассмотренного недостатка под названием Конструктор перемещения.
Вы просто не до конца поняли суть семантики перемещения.
copy elision разрешен уже давно в c++.
Croessmah вне форума
Старый 15.04.2016, 14:40   #132
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
понимаете, тот кто пишет на С++, уже знает .
Вы в этом уверены ? Говорить за всех как то нехорошо
Цитата:
Сообщение от Croessmah Посмотреть сообщение
Вы просто не до конца поняли суть семантики перемещения.
да мне достаточно было понять того что он устраняет косяки

связанные с возвратом обьекта по значению.

если создатель ++ принимает обьект по значению то надо создавать копию.

тут вопросов нет.

так он же еще решил это правило применить и к возврату тем самым

уменьшив производительность приложения.

Последний раз редактировалось RAFA91; 15.04.2016 в 14:44.
RAFA91 вне форума
Старый 15.04.2016, 14:52   #133
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

хорошо, что такие люди стандарты не пишут... а то было б тут копирование - это копирование, а тут - не совсем
p51x вне форума
Старый 15.04.2016, 14:57   #134
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
Вы в этом уверены ? Говорить за всех как то нехорошо
хорошо, уточню, речь о тех кто более менее серьезно пишет.

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
да мне достаточно было понять того что он устраняет косяки

связанные с возвратом обьекта по значению.
при перезаписи объекта конструктор перемещения не обязан вызываться, только оператор присваивания.

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
если создатель ++ принимает обьект по значению то надо создавать копию.

тут вопросов нет.

так он же еще решил это правило применить и к возврату тем самым

уменьшив производительность приложения.
он должен создать копию, так как результат функции и ее аргумент это разные вещи.
в С++ это чуть замаскировали, из-за этого кажется что все плохо, но на самом деле.
Код:
Object Test(Object obj)
{
  return obj;
}
равносильна
Код:
Object Test(Object obj)
{
  Object Result(obj);//результат функции
  return;
}
то есть это разные переменные, видно наш конструктор копирования.

насчет медленного кода, так не пишут если хотят производительности.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.04.2016 в 15:00.
Пепел Феникса вне форума
Старый 15.04.2016, 15:20   #135
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
Object Test(Object obj)
{
  Object Result(obj);//результат функции
  return;
}
и что вы этим хотели сказать ?

рас копировщик Test(Object obj)

два копировщик Object Result(obj);//результат функции

три копировщик не нужный но вызывается return Result;


я же еще рас говорю. при возврате по значению копировать нету смысла.

нужно просто придержать вызов деструктора

Последний раз редактировалось RAFA91; 15.04.2016 в 15:23.
RAFA91 вне форума
Старый 15.04.2016, 15:50   #136
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
и что вы этим хотели сказать ?
Вы посты начните читать

Цитата:
рас копировщик Test(Object obj)
два копировщик Object Result(obj);//результат функции
три копировщик не нужный но вызывается return Result;
Не будет три. Это вам показали "внутренности" почему при возврате вызывается копировальщик. Потому что это другая переменная.

Цитата:
я же еще рас говорю. при возврате по значению копировать нету смысла.
Может хоть усраться, но вы не авторитет и знаний у вас нет.

Цитата:
нужно просто придержать вызов деструктора
Ну вот вы и дошли до оптимизации, которые компиляторы делают очень давно... если им не мешают гавнокодом.
p51x вне форума
Старый 15.04.2016, 16:02   #137
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вы посты начните читать


Не будет три..


За слова надо отвечать

зачем тролите ?







Код:
#include <iostream>
using namespace std;
 
class Base {
public:
    Base(){
        cout<<"create Base "<<this<<endl;
    }
    Base(const Base& a){
        cout<<"create copy Base "<<this<<" "<<&a<<endl;
    }
   /* Base(Base&& a)  
{
        cout<<"create move Base "<<this<<" "<<&a<<endl;
    }*/
    ~Base() {
        cout<<"deleting Base "<<this<<endl;
    }
 
    Base & operator = (const Base &a)
    {
    	cout<<"operator "<<this<<" "<<&a<<endl;
    	return *this;
    }
 
 
};
 
Base func (Base x)
{
	cout<<"*********************"<<endl;
	
	Base y(x);
 
	return y;
}
 
int main()
{
 
        Base a;
 
 
       Base b; 
 
        cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
 
       func (a);
 
       cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
 
    return 0;
}
Изображения
Тип файла: jpg Бе.JPG (35.8 Кб, 27 просмотров)

Последний раз редактировалось Alex11223; 15.04.2016 в 16:09.
RAFA91 вне форума
Старый 15.04.2016, 16:08   #138
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Как это относится к процитированному сообщению?

Если вы удивились отсутствию оптимизаций, то для начала стоит убедиться, что они включены. Например, что Release сборка в VS.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума
Старый 15.04.2016, 16:17   #139
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Как это относится к процитированному сообщению?

.
прямолинейно.

мне тут уважаемый p51x говорит что третий раз копировщик не

вызовется. вот пускай изучает скрин

и вы тоже внимательно изучайте сообщения . и что за бред с оптимизацией ?

кому нужен компилятор без оптимизации. ))))))))

Последний раз редактировалось RAFA91; 15.04.2016 в 16:20.
RAFA91 вне форума
Старый 15.04.2016, 16:25   #140
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
прямолинейно.

мне тут уважаемый p51x говорит что третий раз копировщик не

вызовется. вот пускай изучает скрин

и вы тоже внимательно изучайте сообщения . и что за бред с оптимизацией ?

кому нужен компилятор без оптимизации. ))))))))
вы в коде написали лишнюю переменную, в моем премере ее нет, я показал образно.(второй код как бы не компилируется)
Код:
Object Test(Object obj)
{
  return obj;
}
сам код такой при этом.
Цитата:
кому нужен компилятор без оптимизации. ))))))))
в отладке оптимизации мешают.
Цитата:
мне тут уважаемый p51x говорит что третий раз копировщик не

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


Код:
Base func (Base x)
{
	cout<<"*********************"<<endl;
	Base y(x);
	return y;
}
внутри это выходит так:
просто пример, это не код С++, лишь пример для показания внутренностей.
Код:
Base func (Base x)
{
	cout<<"*********************"<<endl;
	Base y(x);
        Base Result(y);
	return;
}
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.04.2016 в 16:29.
Пепел Феникса вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработчик перемещения mitiay Общие вопросы Delphi 1 11.05.2015 20:50
Отслеживание перемещения picturebox Aleksa91 C# (си шарп) 7 15.06.2014 14:55
Планирование перемещения squid90 Фриланс 3 27.12.2011 21:48
Тормоза перемещения по DBGrid artemavd БД в Delphi 17 12.10.2010 17:52
С++ (конструктор, деструктор, копирующий конструктор) Jane-sad Помощь студентам 2 01.10.2010 10:01