<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3837295</guid>
        <pubDate>Thu, 20 Aug 2020 06:56:06 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3837295</link>
        <description><![CDATA[Black_Dragon: Я с вопросом к ТС-у.<br><br>А чего ты хочешь добиться, используя std::move?<br>CallbackType - это ссылка на функцию... технически - указатель.]]></description>
        <author>Black_Dragon</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3835052</guid>
        <pubDate>Fri, 24 Jul 2020 06:36:28 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3835052</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3835045'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T22:38:42+00:00">23.07.20, 22:38</time></span><div class='quote '>Дальше абзац ты не читал, я понял.</div></div><br>
Ты понял неверно  :-? С чего ты вообще это взял? Написанное мной не противоречит этому абзацу дальше.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3835045'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T22:38:42+00:00">23.07.20, 22:38</time></span><div class='quote '>C style casts не провоцирует ошибок. Предмет спора не провоцирует ошибок. Ты явно продемонстрировал, что не в теме.</div></div><br>
c style casts-то не провоцирует?  :lool: <br>
Ладно, ты опять включил режим <s class='tag-s'>мара</s> тьфу, мудрого сенсея то есть. Ну тебя нафиг, пожалуй. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-24T06:40:44+00:00">24.07.20, 06:40</time></span></span><br>
Вообще, кто-нибудь понял, что <strong class='tag-b'>Qraizer</strong> хотел этой своей аналогией со c style casts сказать?<br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Сообщения были разделены в тему &quot;<a class='tag-url' href='https://forum.sources.ru/index.php?showtopic=419350' target='_blank'>Обслуживание Мас</a>&quot;</span></span>]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3835045</guid>
        <pubDate>Thu, 23 Jul 2020 22:38:42 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3835045</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3835031'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T19:12:15+00:00">23.07.20, 19:12</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3835018'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T14:18:57+00:00">23.07.20, 14:18</time></span><div class='quote '>Иначе можно было бы одной задачей считать любую композицию действий.</div></div>Можно, вопрос лишь в том, имеет это какой-либо смысл или нет.</div></div>Дальше абзац ты не читал, я понял.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3835031'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T19:12:15+00:00">23.07.20, 19:12</time></span><div class='quote '>C style casts легко провоцируют ошибки, в отличие от предмета спора.</div></div>C style casts не провоцирует ошибок. Предмет спора не провоцирует ошибок. Ты явно продемонстрировал, что не в теме.<br>
Бинды rvalue на ссылки, вещественные типы и operator&lt;&lt;, operator&gt;&gt; и operator%, новый стиль кастов, отсутствие частичной специализации шаблонов функций, иммутабельность лямбд по умолчанию, невозможность перегрузки некоторых операций и ещё многое другое – всё это растёт из одного корня: философии, положенной в основу языка.<br>
<strong class='tag-b'>OpenGL</strong>, я сформулировал принцип, следуя которому язык развивался с начала 80-ых, ты упорно не хочешь его принять. Я задал простой вопрос, ответ на который легко отличает человека, знающего язык, от человека, понимающего язык. Трижды задал. Ты наотрез отказываешься отвечать. Я привёл ещё три примера следования этому же принципу, два из них ты проигнорировал, в третьем не увидел связи с – внезапно – исходным принципом. Я на что-то ещё и намекаю? Серьёзно, <strong class='tag-b'>OpenGL</strong>?<br>
Зачем ты продолжаешь писать в тему, которая тебе не интересна? Ок, считай, что я намекаю на то, что для Плюсов ты безнадёден. Ты сюда пришёл меня подоставать в надежде, что сорвусь?]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3835031</guid>
        <pubDate>Thu, 23 Jul 2020 19:12:15 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3835031</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3835018'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T14:18:57+00:00">23.07.20, 14:18</time></span><div class='quote '>Иначе можно было бы одной задачей считать любую композицию действий.</div></div><br>
Можно, вопрос лишь в том, имеет это какой-либо смысл или нет. Если некий набор задач логично в некоторых контекстах считать одной задачей, то я считаю, что так и следует делать. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-23T19:26:37+00:00">23.07.20, 19:26</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3835018'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T14:18:57+00:00">23.07.20, 14:18</time></span><div class='quote '>Не просто связан, а ответ на него является первопричиной данного холивара. </div></div><br>
Не связан. C style casts легко провоцируют ошибки, в отличие от предмета спора. Ну или ты, как обычно, делаешь слишком тонкий намёк :D]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3835018</guid>
        <pubDate>Thu, 23 Jul 2020 14:18:57 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3835018</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3835010'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T13:05:36+00:00">23.07.20, 13:05</time></span><div class='quote '>Ну да, функция выполняет две задачи, но они вместе могут рассматриваться как одна. Ты видишь в этом какое-либо противоречие?</div></div>Конечно. Иначе можно было бы одной задачей считать любую композицию действий. Твоё право написать функцию, возвращающую минимальное простое число, большее своего аргумента и считать это одной задачей. Но когда ты будешь её реализовывать, наверняка декомпозируешь на несколько более простых. Неужели не будешь при этом их оформлять отдельными функциями и напишешь структурную простыню на пару экранов? <span class='tag-size' data-value='8' style='font-size:8pt;'>Тут хотел ещё дальше написать, но передумал, потому что:</span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3835010'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T13:05:36+00:00">23.07.20, 13:05</time></span><div class='quote '>Если про то, что хотел сделать программист c-style cast-ом, то он с обсуждением не связан.</div></div>Понятно. Не просто связан, а ответ на него является первопричиной данного холивара. Вынужден констатировать, что разговор окончен.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3835010</guid>
        <pubDate>Thu, 23 Jul 2020 13:05:36 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3835010</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834993'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T11:39:02+00:00">23.07.20, 11:39</time></span><div class='quote '>Почему ты противоречишь себе?</div></div><br>
Я не противоречу. Ну да, функция выполняет две задачи, но они вместе могут рассматриваться как одна. Ты видишь в этом какое-либо противоречие?<br>
Возможно, мы просто о разных функциях говорим. Если ты о публичных методах класса/модуля, то да, я бы скорей всего не стал эту функцию выносить туда. Как деталь реализации такая функция более чем имеет право на существование.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834993'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T11:39:02+00:00">23.07.20, 11:39</time></span><div class='quote '>Не чаще, чем не интересоваться возвращённым в rvalue результатом. </div></div><br>
И это достаточно часто случается, если у тебя основное назначение функции не обработка переданных аргументов, а сайд-эффекты. Допустим, есть функция update_something, которая обновляет в базе некоторые записи по какому-то условию, и возвращает список ключей тех записей, которые были обновлены. Меня запросто в каком-то месте может интересовать только факт того, что обновление завершилось (не было брошено исключение, например), а сам список итоговых записей нафиг не нужен.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834993'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T11:39:02+00:00">23.07.20, 11:39</time></span><div class='quote '>Сделай переменную, инициализируй своим выражением и передавай агрументом в ссылку.</div></div><br>
Да это понятно. Неудобно, что на ровном месте компилятор требует бесполезных действий, причём в точно таком же случае, но без константы, он их почему-то не требует. И это несмотря на mutable :D<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834993'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T11:39:02+00:00">23.07.20, 11:39</time></span><div class='quote '>Вопрос заключается в том, окупится ли профит от такого дружелюбия дебагом в нередких случаях. </div></div><br>
Мне кажется, что ты переоцениваешь полезность этой фичи. Я, например, с этим сталкивался только когда пытался откомпилить валидный с т.з. майкрософта код на ином компиляторе. Багов же из-за этого я не ловил.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834993'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T11:39:02+00:00">23.07.20, 11:39</time></span><div class='quote '>С вопросом выше ты так и не разобрался?</div></div><br>
Ты про какой вопрос? Если про то, что хотел сделать программист c-style cast-ом, то он с обсуждением не связан.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834993</guid>
        <pubDate>Thu, 23 Jul 2020 11:39:02 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834993</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834982'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T10:01:57+00:00">23.07.20, 10:01</time></span><div class='quote '>Она выполняет одну задачу.</div></div>Почему ты противоречишь себе?<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834982'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-07-23T10:01:57+00:00">23.07.20, 10:01</time></span><div class='quote '>Точно так же я могу сказать &quot;однако нередко нужно его использовать неоднократно и как-то менять&quot;.</div></div>Не чаще, чем не интересоваться возвращённым в rvalue результатом. P.S. Иногда мне нужно делить или умножать вещественные на степени двойки. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-23T11:48:55+00:00">23.07.20, 11:48</time></span></span><br>
P.P.S. Если тебе нужно что-то странное, скажи об этом явно. Сделай переменную, инициализируй своим выражением и передавай агрументом в ссылку. И не интересуйся её дальнейшей судьбой на здоровье. Это ровно то, что ты хочешь, чтобы компилятор сделал за тебя. Компилятору нетрудно сделать это за тебя. Ему также нетрудно сдвигать вещественные или возвращать тебе результат % нам ними. Ему много что нетрудно.<br>
Вопрос заключается в том, окупится ли профит от такого дружелюбия дебагом в нередких случаях. Чем раньше ты узнаешь о потенциальных проблемах в коде, тем быстрее и дешевле ты с ними разберёшься. Очень хорошо, когда компилятор понимает твои намерения, а не просто генерит объектный по указке. С вопросом выше ты так и не разобрался?]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834982</guid>
        <pubDate>Thu, 23 Jul 2020 10:01:57 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834982</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834963'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T19:41:41+00:00">22.07.20, 19:41</time></span><div class='quote '>Функция выполняет две задачи. Что ты мне хочешь этим доказать? Что она хреново спроектирована? Это я тебе и так скажу.</div></div><br>
Она выполняет одну задачу. <br>
<br>
Ну и да, аргумент про продление времени жизни объекта при его присваивании в константную ссылку мне видится несостоятельным. Ты это обосновывал вот так<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834961'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T19:40:12+00:00">22.07.20, 19:40</time></span><div class='quote '>Функция тебе вернула временный объект, который вскоре будет убит. Однако нередко нужно его использовать неоднократно, поэтому без продления его времени жизни пришлось бы копировать.</div></div><br>
но это объяснение константность не использует. Точно так же я могу сказать &quot;однако нередко нужно его использовать неоднократно и как-то менять&quot;. Не поменялось по-моему ровным счётом ничего. Да, ты дальше пишешь &quot;Но без const ты мог бы непреднамеренно, например отдав в другую функцию по неконстантной ссылке, его поменять. &quot;, но это обоснование того, зачем тебе в этом месте нужна константа, а я говорю о причинах, зачем делать такое исключение для константы и только для неё.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834971</guid>
        <pubDate>Thu, 23 Jul 2020 03:16:24 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834971</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834949'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T18:53:58+00:00">22.07.20, 18:53</time></span><div class='quote '>Ух ты. Кто-то ещё пользует бинды...</div></div><br>
<s class='tag-s'>Так нужно:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">K.SetCallback([](void* c, int a, int b){((Shef*)c)-&#62;Entreaty(c,a,b);});</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
???<br>
<br>
Работает так же, но кажется что тут что-то не так :-?</s><br>
<br>
<s class='tag-s'>И так </s>работает:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">K.SetCallback([&amp;](void* c, int a, int b){S.Entreaty(c,a,b);});</div></ol></div></div></div></div><br>
<br>
std::bind мне кажется тут понятнее,<s class='tag-s'>потому как явно указывает на метод класса, безотностительно наличия переменных этого класса.</s><br>
<br>
<s class='tag-s'>Че делать-та??? :wacko:</s>]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834964</guid>
        <pubDate>Wed, 22 Jul 2020 19:47:37 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834964</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834961'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T19:40:12+00:00">22.07.20, 19:40</time></span><div class='quote '>Это как раз продолжение этой же темы с временными объектами. Функция тебе вернула временный объект, который вскоре будет убит. Однако нередко нужно его использовать неоднократно, поэтому без продления его времени жизни пришлось бы копировать.</div></div><br>
Да, это интересная мысль. При наличии перемещения это особо бесполезно, но заре плюсов вполне могло быть аргументом. Обдумать надо :)]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834963</guid>
        <pubDate>Wed, 22 Jul 2020 19:41:41 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834963</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834959'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T19:37:28+00:00">22.07.20, 19:37</time></span><div class='quote '>Например, пусть это будет функция, которая как-то перефигачивает входной вектор и попутно записывает его в файл. Меня может интересовать запись в файл, но перефигаченный вот тут в месте вызова мне вообще не нужен, я просто хочу его записать в файл так, как его записывает эта функция.</div></div>Функция выполняет две задачи. Что ты мне хочешь этим доказать? Что она хреново спроектирована? Это я тебе и так скажу. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-22T19:42:59+00:00">22.07.20, 19:42</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834962'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T19:41:11+00:00">22.07.20, 19:41</time></span><div class='quote '>Не знаю, я C style casts указателей избегаю не из-за const, а в первую очередь из-за того, что они в конце-концов сведутся к reinterpret_cast-у.</div></div>А какая разница, что сделает компилятор? Мы знаем, что он сделает, но вопрос звучал &quot;что хотел сделать программист&quot;.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834962</guid>
        <pubDate>Wed, 22 Jul 2020 19:41:11 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834962</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834957'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T19:34:22+00:00">22.07.20, 19:34</time></span><div class='quote '>По подобной причине C-стайл тайпкастов не в моде. Вот ты можешь сказать, что тут хотел написать программер?</div></div><br>
Не знаю, я C style casts указателей избегаю не из-за const, а в первую очередь из-за того, что они в конце-концов сведутся к reinterpret_cast-у.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834961</guid>
        <pubDate>Wed, 22 Jul 2020 19:40:12 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834961</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834956'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T19:26:25+00:00">22.07.20, 19:26</time></span><div class='quote '>А ещё, полагаю, с этим тесно связано следующее<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">std::string get_string();</div><div class="code_line">&nbsp;</div><div class="code_line">const std::string &amp;x = get_string(); // Ok, string is alive</div><div class="code_line">std::string &amp;y = get_string(); // Compiler error</div></ol></div></div></div></div><br>
что тоже не добавляет логичности и последовательности системе типов.</div></div><br>
Это как раз продолжение этой же темы с временными объектами. Функция тебе вернула временный объект, который вскоре будет убит. Однако нередко нужно его использовать неоднократно, поэтому без продления его времени жизни пришлось бы копировать. (Нынче можно ещё переместить, впрочем, что в большинстве случаев решит проблему.) Но без const ты мог бы непреднамеренно, например отдав в другую функцию по неконстантной ссылке, его поменять. Тебе было бы приятно узнать, что между двумя использованиями он внезапно изменился?]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834959</guid>
        <pubDate>Wed, 22 Jul 2020 19:37:28 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834959</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834955'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T19:22:17+00:00">22.07.20, 19:22</time></span><div class='quote '>Это когда функция вызывается, чтобы сделать работу, а тебе не нужен результат? Редко.</div></div><br>
Не обязательно. Параметр, передаваемый по ссылке, может быть одновременно и входным, и выходным параметром. Например, пусть это будет функция, которая как-то перефигачивает входной вектор и попутно записывает его в файл. Меня может интересовать запись в файл, но перефигаченный вот тут в месте вызова мне вообще не нужен, я просто хочу его записать в файл так, как его записывает эта функция.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834957</guid>
        <pubDate>Wed, 22 Jul 2020 19:34:22 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834957</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834953'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T19:13:44+00:00">22.07.20, 19:13</time></span><div class='quote '>Ну так это программист плохой, пусть учится, да и проставить const где надо это, прямо скажем, не квантовая теория поля, и делается на автомате.</div></div>Вот именно. Но когда на неконстантные ссылки биндятся rvalue, непонятно, то ли автор дурак, что хреново прописал контракт, то ли у тебя лыжи не едут, и ты тупо что-то не понимаешь в используемом тобою API. А так язык внятно говорит, что альтернативы нет.<br>
По подобной причине C-стайл тайпкастов не в моде. Вот ты можешь сказать, что тут хотел написать программер?<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">void f(const unsigned long *param)</div><div class="code_line">{</div><div class="code_line">/* ... */</div><div class="code_line">&nbsp;&nbsp;unsigned int *ptr = (unsigned int*)param;</div><div class="code_line">/* ... */</div><div class="code_line">}</div></ol></div></div></div></div>Если что, у меня три варианта.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834956</guid>
        <pubDate>Wed, 22 Jul 2020 19:26:25 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834956</link>
        <description><![CDATA[OpenGL: А ещё, полагаю, с этим тесно связано следующее<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">std::string get_string();</div><div class="code_line">&nbsp;</div><div class="code_line">const std::string &amp;x = get_string(); // Ok, string is alive</div><div class="code_line">std::string &amp;y = get_string(); // Compiler error</div></ol></div></div></div></div><br>
что тоже не добавляет логичности и последовательности системе типов. Имхо, это всё должно либо не компилиться, либо падать при попытке доступа к мёртвому объекту.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834955</guid>
        <pubDate>Wed, 22 Jul 2020 19:22:17 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834955</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834953'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T19:13:44+00:00">22.07.20, 19:13</time></span><div class='quote '>Ну не нужен мне выходной параметр, их 3, но мне в данном случае достаточно одного - так редко это бывает?</div></div>Это когда функция вызывается, чтобы сделать работу, а тебе не нужен результат? Редко. Чаще бывает, что функция делает много разных работ, а тебе нужны не все, но это тоже плохой дизайн, правда, уже не твой, а автора той функции. Ещё во времена около C++98, а уж в доC++03 так подавно, сложились критерии отказоустойчивого кода, и декомпозиция, сведённая к нескольким задачам в одной интерфейсной единице, в эти критерии никак не укладывается. Почему, думаешь, положить в std::stack элемент можно одним методом, а выдёргивать оттуда двумя? Сначала получи значение с вершины, и потом отдельно удали из std::stack.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834953</guid>
        <pubDate>Wed, 22 Jul 2020 19:13:44 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834953</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834949'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T18:53:58+00:00">22.07.20, 18:53</time></span><div class='quote '>А так как временные объекты в качестве выходных параметров использовать невозможно, то вызывающая сторона явно что-то мутит и не знает, что творит.</div></div><br>
Вот именно с этим я и не согласен. Ну не нужен мне выходной параметр, их 3, но мне в данном случае достаточно одного - так редко это бывает? Более того, МСный компилятор это разрешает, и я что-то не припомню у себя багов, которые бы возникали из-за такого поведения. Просто по мне так если уж запрещать, то и для констант тоже для единообразия, либо разрешать для всего. И что это способствует ненаписанию конрактов я тоже не очень понимаю. Как именно способствует? Ты о том, что вместо const int &amp; они могли объявить параметр как int&amp;? Ну так это программист плохой, пусть учится, да и проставить const где надо это, прямо скажем, не квантовая теория поля, и делается на автомате.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834949</guid>
        <pubDate>Wed, 22 Jul 2020 18:53:58 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834949</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834947'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T18:21:24+00:00">22.07.20, 18:21</time></span><div class='quote '>По-моему не появится никаких проблем, если разрешить передавать rvalue в параметры-неконстантные ссылки, которых бы не было в случае параметров-константных ссылок.</div></div>Когда-то в бородатых 90-ых так и было. Можно было по неконстантной ссылке, например в int&amp;, передавать результаты выражений типа a+b. Компилеры писали варнинг, мол, будет заюзана временная переменная, но код генерить это им не мешало. В итоге в C++98 это отменили, ибо это отвращает программеров писать правильные контракты в прототипах функций. Мол, const означает не изменение функцией, его отсутствие означает выходной параметр. А так как временные объекты в качестве выходных параметров использовать невозможно, то вызывающая сторона явно что-то мутит и не знает, что творит. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-22T19:06:13+00:00">22.07.20, 19:06</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834948'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T18:25:18+00:00">22.07.20, 18:25</time></span><div class='quote '>Пусть будет тут вторая часть истории с хэпиэндом </div></div>Ух ты. Кто-то ещё пользует бинды...]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834948</guid>
        <pubDate>Wed, 22 Jul 2020 18:25:18 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834948</link>
        <description><![CDATA[JoeUser: Пусть будет тут <a class='tag-url' href='https://ideone.com/KsaJ3y' target='_blank'>вторая часть</a> истории с хэпиэндом  :) <br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;utility&#62;</div><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;functional&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">//──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">using CallbackType = std::function&#60;void(void*, int, int)&#62;;</div><div class="code_line">// ──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">&nbsp;</div><div class="code_line">class Karbofos {</div><div class="code_line">&nbsp;&nbsp; &nbsp;CallbackType Call;</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;const std::string Name = &quot;Карбофос&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;void SetCallback(CallbackType C) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Call = std::move(C);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;void Run() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (Call)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Call(this, 1, 20);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;- Не продам!\n&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">//──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">class Shef {</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;void Entreaty(void* c, int a, int b) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;- &quot; &#60;&#60; ((Karbofos*)c)-&#62;Name</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;&#60; &quot;, продай слона за &quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;&#60; a &#60;&#60; &quot;.&quot; &#60;&#60; b &#60;&#60; &quot;р ?\n&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">//──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;Karbofos K;</div><div class="code_line">&nbsp;&nbsp;Shef S;</div><div class="code_line">&nbsp;&nbsp;K.SetCallback(std::bind(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&amp;Shef::Entreaty, &amp;S,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::placeholders::_1,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::placeholders::_2,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::placeholders::_3)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );</div><div class="code_line">&nbsp;&nbsp;K.Run();</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834947</guid>
        <pubDate>Wed, 22 Jul 2020 18:21:24 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834947</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834864'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T07:36:12+00:00">22.07.20, 07:36</time></span><div class='quote '>Во первых, чтоб применять move - Нужен rvalue, т.е. функция должна принимать что то типа:</div></div><br>
Не обязательно. <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">void MyClass::set_something(std::vector&#60;Something&#62; value) &nbsp;// Передача по значению</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;this-&#62;something = std::move(value); // Переместит, лишних копирований не будет</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834919'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T14:21:05+00:00">22.07.20, 14:21</time></span><div class='quote '>Поэтому Стандарт запрещает передавать rvalue под такие параметры, ибо они, являясь временными объектами, по возврату из функции просто не дают возможности этими результатами воспользоваться, ибо они будут разрушены на ближайшей ; (ну, почти всегда на ближайшей), а значит программист практически наверняка облажался, написав такую конструкцию.</div></div><br>
По мне так это просто недосмотр языка. По-моему не появится никаких проблем, если разрешить передавать rvalue в параметры-неконстантные ссылки, которых бы не было в случае параметров-константных ссылок.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834936</guid>
        <pubDate>Wed, 22 Jul 2020 16:34:22 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834936</link>
        <description><![CDATA[Qraizer: Угу. Даже если там был бы только перемещающий operator=(), компилятор сам rvalue ref из rvalue не сделает, остановится с ошибкой. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-22T16:36:45+00:00">22.07.20, 16:36</time></span></span><br>
С другой стороны копирование std::function без захваченных неPOD дешёвое, так что много не потеряешь.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834933</guid>
        <pubDate>Wed, 22 Jul 2020 16:00:01 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834933</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>Qraizer</strong>, так в коде:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">void SetCallback(CallbackType B, CallbackType E) {</div><div class="code_line">&nbsp;&nbsp;Begin = std::move(B);</div><div class="code_line">&nbsp;&nbsp;End = std::move(E);</div><div class="code_line">}</div></ol></div></div></div></div><br>
Все-таки std::move нужен, иначе будут копирования?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834919</guid>
        <pubDate>Wed, 22 Jul 2020 14:21:05 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834919</link>
        <description><![CDATA[Qraizer: Начнём с того, что функциональные объекты придумали как раз для того, чтобы добавить к &quot;фрагменту кода&quot; семантику значений и тем самым сделать работу с ним подобной работе с данными: запомнил, передал, переприсвоил, &quot;частичные запомнил&quot; аргументы, ...использовал запомненное, в смысле, вызвал. Лепить к ним ещё и указатели чаще всего бессмысленно, не реже, чем через поинтеры работать с обычными переменными, что лежат не в dynamic storage.<br>
Продолжим тем, что ежели функция принимает неконстанту иначе, нежели по значению, это означает контракт, при котором она <strong class='tag-b'>будет</strong> его менять, т.е. через него возвращается результат её работы. Поэтому Стандарт запрещает передавать rvalue под такие параметры, ибо они, являясь временными объектами, по возврату из функции просто не дают возможности этими результатами воспользоваться, ибо они будут разрушены на  ближайшей ; (ну, почти всегда на ближайшей), а значит программист практически наверняка облажался, написав такую конструкцию.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834862'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T07:07:03+00:00">22.07.20, 07:07</time></span><div class='quote '>На сколько тут std::move нужен?</div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834864'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T07:36:12+00:00">22.07.20, 07:36</time></span><div class='quote '>Но как по мне - он там нахрен не нужен.<br>
Во первых, чтоб применять move - Нужен rvalue, ...</div></div>Не спорю, запутаться с семантикой ссылок недолго. Сам путался, пока не привык. Но это несложно, не сложнее, чем разобраться с ссылками после C, где их не было.<br>
Вы путаете причину и следствие. Немного ликбеза. std::move() нужен, чтобы ...скажем так, <em class='tag-i'>преобразовать</em> (не правильный глагол на самом деле) объект к rvalue ref, изначально таковым не являвшимся. Нужно это конечно же для того, чтобы компилятор в этой точке смог использовать семантику перемещения, если сможет, ибо в противном случае он предпочтёт другие методы. Связано это с тем, что (и снова не вполне правильная терминология) перемещения обладают низким приоритетом при наличии других возможностей. А это в свою очередь связано с тем, что семантика перемещения <strong class='tag-b'>подразумевает разрушение</strong> своего источника, что естественно весьма опасно для <strong class='tag-b'>невременных</strong> объектов, поэтому надёжнее предположить, что &quot;программист практически наверняка облажался, написав такую конструкцию&quot; ©. Используя std::move(), программист чётко даёт понять компилятору, что он не буратина, и знает, что делает. Другой причины использовать std::move() нет. В частности его бессмысленно применять к объектам, которые и так уже rvalue ref.<br>
И тут есть одна ловушка: rvalue ref – это просто контракт, срабатывающий при инициализации, который <strong class='tag-b'>разрешает</strong> биндить ссылки на временные объекты, что иначе <strong class='tag-b'>запрещено</strong> контрактом обычных ссылок по причине, как выше было аргументировано. Но в остальном это самые что ни на есть обычные ссылки, которые, как известно являются псевдонимами своих подссыльних объектов. Разница между этими типами ссылок в том, что обычная lvalue ссылка является псевдонимом lvalue, а rvalue ref псевдонимом rvalue. Это приводит к тому, что после инициализации любое использование lvalue ref сводится к lvalue, что практически не привносит в дальнейшем особых сложностей в семантику использования получившегося в итоге объекта, тогда как использование rvalue ref сводится к rvalue, что в связи с вышеозначенным низким приоритетом бинда rvalue к ссылочной семантике, очень часто приводит к необходимости постоянно повторять компилятору, что мы не буратина.<br>
Поэтому, <strong class='tag-b'>Wound</strong>, ты прав в том смысле, что std::move не помешает, чтобы компилятор смог использовать семантику перемещения в присваиваниях Begin и End, но для этого источникам нет необходимости быть обязательно rvalue ref, так что параметры SetCallback() могут быть и обычными значениями. Другое дело, что не объявив их rvalue ref, сам вызов SetCallback() при связывании аргументов с его параметрами не заюзает перемещения, аргументы в параметры скопируются, так что да, имеет смысл идти до конца и их также объявить как rvalue ref. Однако это уже не так однозначно, так как в результате контракт допускает, что при вызове SetCallback() её <strong class='tag-b'>аргументы</strong> могут быть также разрушены в точке инициализации её параметров, а не только эти параметры в присваиваниях Begin и End, тогда как если параметры SetCallback() суть простые значения, подобного с аргументами не произойдёт: параметры, будучи их копиями, могут быть разрушены после перемещения Begin и End, т.к. к rvalue ref будут сведены они, т.е. разрушатся только лишь копии аргументов.<br>
Что  же касается<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834864'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T07:36:12+00:00">22.07.20, 07:36</time></span><div class='quote '>В третьих, даже если ты явно не напишешь std::move, а по логике он там применим, компилятор сам выполнит перемещение(соптимизирует и выполнит)</div></div>то как я чуть выше сказал, компилятор сам этого не сделает, для него использование rvalue ref порождает новые rvalue объекты, которые сводить обратно к rvalue ref нужно заново. Точнее, иногда он всё-таки будет способен на подобное, но в очень редких случаях, например, если источником уже является некая несводимая rvalue ref, например возвращаемое значение некой функции, которая возвращает результат по rvalue ref.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834864'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T07:36:12+00:00">22.07.20, 07:36</time></span><div class='quote '>Во вторых, даже если все будет так - никаких гарантий нет что будет реализовано перемещение.</div></div>Ну это классика. Семантика перемещения для стандартных типов не описывает, что происходит с источниками, однако подавляющее большинство реализаций будут просто их копировать, так что никакой разницы от копирования нет. Но это не точно, Стандарт ничего тут не гарантирует, просто реализациям так проще. Что касается перемещений не стандартных типов, то тут всё в руках программиста, написавшего (или забившего на это) код перемещения. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-22T14:34:33+00:00">22.07.20, 14:34</time></span></span><br>
Вот маленький пример для иллюстрации сказанного<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">int b;</div><div class="code_line">&nbsp;</div><div class="code_line">int&amp;&amp; f(int&amp;&amp; z)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;b = std::move(z); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // без std::move() скопилится, но и не разрушит z</div><div class="code_line">&nbsp;</div><div class="code_line">// &nbsp;return z; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; не скопилится, нужен каст из rvalue к rvalue ref</div><div class="code_line">&nbsp;&nbsp;return std::move(z);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void g(int&amp;&amp; z)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;// первый (внутренний) вызов без std::move() не скопилится, нужен каст из rvalue к rvalue ref</div><div class="code_line">&nbsp;&nbsp;// второй (внешний) вызов std::move() не требует, т.к. это несводимый контекст использования ссылок</div><div class="code_line">&nbsp;&nbsp;f(f(std::move(z)));</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834873</guid>
        <pubDate>Wed, 22 Jul 2020 08:57:14 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834873</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834872'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T08:51:57+00:00">22.07.20, 08:51</time></span><div class='quote '>За-то я написал &quot;если&quot; </div></div><br>
Ну сам std::move вообще не занимается ничем, кроме каста входящего значения в rvalue, так что вряд ли он там может быть с чем то связан. Вот например можно посмотреть псевдро-реализацию std::move в блоге Майерса, ну или почитать его книжку, там об этом написано.<br>
<a class='tag-url' href='http://scottmeyers.blogspot.com/2012/11/on-superfluousness-of-stdmove.html' target='_blank'>http://scottmeyers.blogspot.com/2012/11/on...of-stdmove.html</a>]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834872</guid>
        <pubDate>Wed, 22 Jul 2020 08:51:57 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834872</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834870'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T08:42:33+00:00">22.07.20, 08:42</time></span><div class='quote '>Ну тот код который привел ты - у тебя там нет лямбд</div></div><br>
За-то я написал &quot;если&quot; :)]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834870</guid>
        <pubDate>Wed, 22 Jul 2020 08:42:33 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834870</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834867'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T08:27:07+00:00">22.07.20, 08:27</time></span><div class='quote '>Пишут, что std::move как-то связан со списками захвата, если в качестве функции передается лямбда.</div></div><br>
Ну тот код который привел ты - у тебя там нет лямбд  :-?]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834867</guid>
        <pubDate>Wed, 22 Jul 2020 08:27:07 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834867</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>Wound</strong>, я бегло глянул в сети, не вдавался в подробности. Пишут, что std::move как-то связан со списками захвата, если в качестве функции передается лямбда.<br>
<br>
И вааще, Киля, ты должен оценить сейчас всю глубину глубин  :lol: <br>
<br>
<img class='tag-img' src='https://i112.fastpic.ru/big/2020/0722/fe/34530a2d2f436e4f025eec43b0089bfe.png' alt='user posted image'>]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834866</guid>
        <pubDate>Wed, 22 Jul 2020 07:50:19 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834866</link>
        <description><![CDATA[Wound: Ну и к слову вопрос еще состоит в том - можно ли перемещать указатели? У меня стойкое ощущение что указатель - это lvalue, а никак не rvalue.<br>
Майерса год-два назад читал, там про это все написано. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-22T07:58:07+00:00">22.07.20, 07:58</time></span></span><br>
Как мне помнится<br>
lvalue - это то, что живет на следующей строчке, после его объявления.<br>
rvalue - это то, что не живет на следующей строчке, после его объявления.<br>
<br>
Что то типа там:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">int a = 5; //! a = lvalue, 5 - rvalue</div><div class="code_line">SomeClass b = a.getSomeClass(); //! b - lvalue, a.getSomeClass() - rvalue(если возвращается копия объекта, а не какой нибудь кусок памяти в куче).</div><div class="code_line">void SomeFunc(std::string str); //! str - rvalue, потому что живет не дольше SomeFunc</div><div class="code_line">void SomeFunc2(const std::string&amp; str)//! str - lvalue, потому что живет дольше SomeFunc</div></ol></div></div></div></div><br>
Это я так по памяти воспроизвел. Значит и указатель на функцию это 100% lvalue, и std::move, просто скопирует побайтно объект, никаких семантик перемещения не будет. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-22T08:01:34+00:00">22.07.20, 08:01</time></span></span><br>
Разве что у тебя там std::function сможет переместится, что то я его проглядел, но это уже надо его конструкторы смотреть - если есть перемещающий, возможно и можно.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834865</guid>
        <pubDate>Wed, 22 Jul 2020 07:37:22 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834865</link>
        <description><![CDATA[JoeUser: Лан, ждем <strong class='tag-b'>Qraizer</strong>&#39;а  8-)]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834864</guid>
        <pubDate>Wed, 22 Jul 2020 07:36:12 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834864</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834862'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T07:07:03+00:00">22.07.20, 07:07</time></span><div class='quote '>На сколько тут std::move нужен? </div></div><br>
Без понятия, тонкости реализации я уже забыл, это пусть лучше <strong class='tag-b'>Qraizer</strong> просветлит.<br>
Но как по мне - он там нахрен не нужен.<br>
Во первых, чтоб применять move - Нужен rvalue, т.е. функция должна принимать что то типа:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;void SetCallback(CallbackType&amp;&amp; B, CallbackType&amp;&amp; E) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Begin = std::move(B);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;End = std::move(E);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><br>
Во вторых, даже если все будет так - никаких гарантий нет что будет реализовано перемещение.<br>
В третьих, даже если ты явно не напишешь std::move, а по логике он там применим, компилятор сам выполнит перемещение(соптимизирует и выполнит)<br>
В четвертых - у тебя там не просто указатели на какие то переменные, а указатели на функцию, не думаю что оно там будет что то перемещать, хотя ньюансы не знаю.<br>
<br>
ИМХО - это лишнее.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834862</guid>
        <pubDate>Wed, 22 Jul 2020 07:07:03 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834862</link>
        <description><![CDATA[JoeUser: Киля, ну прости&#33;  :lol: Спасибо. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-22T07:27:11+00:00">22.07.20, 07:27</time></span></span><br>
Кстати, есть еще совет вот такой:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">void SetCallback(CallbackType B, CallbackType E) {</div><div class="code_line">&nbsp;&nbsp;Begin = std::move(B);</div><div class="code_line">&nbsp;&nbsp;End = std::move(E);</div><div class="code_line">}</div></ol></div></div></div></div><br>
На сколько тут std::move нужен?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834859</guid>
        <pubDate>Wed, 22 Jul 2020 06:47:26 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834859</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834849'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T02:53:45+00:00">22.07.20, 02:53</time></span><div class='quote '>Как мне в SetCallback передать сразу указатели на функции, без использования временных переменных? </div></div><br>
У тебя прям талант придумывать себе проблемы. Убери указатели вообще у CallbackType. Зачем ты их туда написал? С какой целью ты их туда написал? Сам CallbackType  - не является разве указателем(ну вернее он является std::function, но сам шаблонный параметр то указатель на функцию)?<br>
Ты у себя прилепил указатель на указатель на функцию и спрашиваешь такие вещи.<br>
<br>
<a class='tag-url' href='https://ideone.com/miVYwD' target='_blank'>https://ideone.com/miVYwD</a><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;#include &#60;iostream&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;#include &#60;functional&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;// ──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;using CallbackType = std::function&#60;void(void*)&#62;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;// ──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;class Karbofos {</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CallbackType Begin = nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CallbackType End = nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const std::string Name = &quot;Карбофос&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void SetCallback(CallbackType B, CallbackType E) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Begin = B;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End = E;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void Run() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Begin) (Begin)(this);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;- Не отдам, слон - мой!\n&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (End) (End)(this);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;// ──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;void Shef(void* i) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;- Стой, живодер &quot; &#60;&#60; ((Karbofos*)(i))-&#62;Name &#60;&#60; &quot;!\n&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;// ──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;void Kollega(void* i) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;- &quot; &#60;&#60; ((Karbofos*)(i))-&#62;Name &#60;&#60; &quot;, ты немец и контрабандист!\n&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;// ──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;int main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Karbofos Object; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//CallbackType S = Shef;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//CallbackType K = Kollega;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Object.SetCallback(Shef,Kollega);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Object.Run();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-22T06:50:20+00:00">22.07.20, 06:50</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834852'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T04:14:19+00:00">22.07.20, 04:14</time></span><div class='quote '>На SO залепили на умных указателях. Ну выход. Ну почему просто так нельзя как-то? </div></div><br>
Ну там днари походу сидят, дергают на свой рейтинг и пишут всякий оцтой. Раньше там чаще можно было встретить полезной информации. Сейчас приходится перелопачивать тонну какого то шлака, чтоб найти вменяемый ответ. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-22T07:01:53+00:00">22.07.20, 07:01</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834849'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-07-22T02:53:45+00:00">22.07.20, 02:53</time></span><div class='quote '>Блин, переработался я :lol: new CallbackType(), решает ... осталось как-то возможную утечку памяти подпилить хитрыми указателями. </div></div><br>
&quot;...Таких извращений Иван не видал&#33;...&quot; &copy; Красная Плесень.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834852</guid>
        <pubDate>Wed, 22 Jul 2020 04:14:19 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834852</link>
        <description><![CDATA[JoeUser: На SO залепили на умных указателях. Ну выход. Ну почему просто так нельзя как-то?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834849</guid>
        <pubDate>Wed, 22 Jul 2020 02:53:45 +0000</pubDate>
        <title>Можно ли как-то без временных переменных?</title>
        <link>https://forum.sources.ru/index.php?showtopic=419210&amp;view=findpost&amp;p=3834849</link>
        <description><![CDATA[JoeUser: Всем привет&#33;<br>
<br>
Накидал <a class='tag-url' href='https://ideone.com/qQt0WT' target='_blank'>небольшой примерчик</a>, и по нему есть вопрос:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;functional&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">// ──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">&nbsp;</div><div class="code_line">using CallbackType = std::function&#60;void(void*)&#62;;</div><div class="code_line">&nbsp;</div><div class="code_line">// ──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">&nbsp;</div><div class="code_line">class Karbofos {</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CallbackType *Begin = nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CallbackType *End = nullptr;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const std::string Name = &quot;Карбофос&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;void SetCallback(CallbackType *B, CallbackType *E) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Begin = B;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;End = E;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;void Run() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;try {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (Begin) (*Begin)(this);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;- Не отдам, слон - мой!\n&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (End) (*End)(this);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;} catch(const std::bad_function_call&amp; E) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Хреновый вызов: &quot; &#60;&#60; E.what() &#60;&#60; &#39;\n&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;} catch(...) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Случилось страшное!\n&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">// ──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">&nbsp;</div><div class="code_line">void Shef(void* i) {</div><div class="code_line">&nbsp;&nbsp;std::cout &#60;&#60; &quot;- Стой, живодер &quot; &#60;&#60; ((Karbofos*)(i))-&#62;Name &#60;&#60; &quot;!\n&quot;;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// ──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">&nbsp;</div><div class="code_line">void Kollega(void* i) {</div><div class="code_line">&nbsp;&nbsp;std::cout &#60;&#60; &quot;- &quot; &#60;&#60; ((Karbofos*)(i))-&#62;Name &#60;&#60; &quot;, ты немец и контрабандист!\n&quot;;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// ──────────────────────────────────────────────────────────────────────────────</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;Karbofos Object; &nbsp;</div><div class="code_line">&nbsp;&nbsp;CallbackType S = Shef;</div><div class="code_line">&nbsp;&nbsp;CallbackType K = Kollega;</div><div class="code_line">&nbsp;&nbsp;Object.SetCallback(&amp;S,&amp;K);</div><div class="code_line">&nbsp;&nbsp;Object.Run();</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Как мне в SetCallback передать сразу указатели на функции, без использования временных переменных? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-07-22T03:34:38+00:00">22.07.20, 03:34</time></span></span><br>
Блин, переработался я :lol: new CallbackType(), решает ... осталось как-то возможную утечку памяти подпилить хитрыми указателями.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	