<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%3ACpp.png</id>
	<title>Обсуждение файла:Cpp.png - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%3ACpp.png"/>
	<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0:Cpp.png&amp;action=history"/>
	<updated>2026-11-05T03:22:26Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://t8.lbstr.eu/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0:Cpp.png&amp;diff=138819&amp;oldid=prev</id>
		<title>imported&gt;Sl6MUNl) в 17:46, 19 января 2017</title>
		<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0:Cpp.png&amp;diff=138819&amp;oldid=prev"/>
		<updated>2017-01-19T17:46:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Брр, а 11-то откуда вылезло?&lt;br /&gt;
&lt;br /&gt;
Никаким образом 11 не может получиться.&lt;br /&gt;
&lt;br /&gt;
:Как и сказано в статье, дело в точках следования и порядке операторов. В C++ преинкремент возвращает ссылку на переменную (подробности на англ. http://www.learncpp.com/cpp-tutorial/97-overloading-the-increment-and-decrement-operators/), поэтому&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;int i{5}; std::cout &amp;lt;&amp;lt; ++i + ++i;&amp;lt;/source&amp;gt;&lt;br /&gt;
:покажет 14 на любом компиляторе. А с длинным примером сложнее. В коммах перед оператором порядок выполнения для g++&lt;br /&gt;
:&amp;lt;source lang = &amp;quot;cpp&amp;quot;&amp;gt;i /*8*/= /*1*/++i /*3*/+ /*2*/++i /*5*/+ /*4*/++i /*7*/+ /*6*/++i;&amp;lt;/source&amp;gt;&lt;br /&gt;
:и для VC++&lt;br /&gt;
:&amp;lt;source lang = &amp;quot;cpp&amp;quot;&amp;gt;i /*8*/= /*1*/++i /*5*/+ /*2*/++i /*6*/+ /*3*/++i /*7*/+ /*4*/++i;&amp;lt;/source&amp;gt;&lt;br /&gt;
:То есть g++ вычисляет инкремент в момент, когда он требуется для проведения сложения, а VC++ анализирует сразу все выражение и вычисляет инкременты.&amp;lt;br&amp;gt;&lt;br /&gt;
:На g++ получаем 2 + 2 + 3 + 4 = 11, так как в первом сложении обе части – ссылки, они инкрементятся, вычисляется значение, временно сохранияется, а далее уже инкрементируется только правая часть. Об этом неплохо написано в обсуждении к статье.&amp;lt;br&amp;gt;&lt;br /&gt;
:Чтобы g++ тоже вычислял сначала все преинкременты,нужно поставить скобки таким образом&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;i = ++i + (++i + (++i + ++i));&amp;lt;/source&amp;gt;&lt;br /&gt;
:Хз с чем это связано, может с ассоциативностью.  — [[Участник:Sl6MUNl)|Sl6MUNl)]] ([[Обсуждение участника:Sl6MUNl)|обсуждение]])&lt;/div&gt;</summary>
		<author><name>imported&gt;Sl6MUNl)</name></author>
	</entry>
</feed>