<?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=150319&amp;view=findpost&amp;p=1472437</guid>
        <pubDate>Sat, 03 Mar 2007 09:20:45 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1472437</link>
        <description><![CDATA[Unreal Man: Что-то мне этот мелочный терминологический спор уже надоел...<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1471705'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>LPBOY &#064; <time class="tag-quote__quoted-time" datetime="2007-03-02T17:26:41+03:00">02.03.07, 14:26</time></span><div class='quote '>Запись sizeof(Type) означает &quot;размер объекта типа Type&quot;, а не &quot;размер типа Type&quot;.</div></div><br>
С такой трактовкой получается, что здесь<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1203370'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Hryak &#064; <time class="tag-quote__quoted-time" datetime="2006-08-03T17:19:57+00:00">03.08.06, 17:19</time></span><div class='quote '>Грубо говоря, это типы, которые нельзя «пощупать», например, нельзя узнать их размер с помощью операции sizeof</div></div><br>
<strong class='tag-b'>Hryak</strong> попросту лил воду, ибо размер вообще никакого типа нельзя узнать, поскольку понятия размера для типа якобы не существует.<br>
<br>
Но давай почитаем тот же стандарт:<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>ISO/IEC 14­882:2003(E) §5.3.3 Sizeof</span><div class='quote '>When applied to a reference or a reference type, the result is the <span class="tag-color tag-color-named" data-value="magenta" style="color: magenta">size of the referenced <strong class='tag-b'>type</strong></span>.</div></div><br>
Значит, понятие размера для типа всё же имеет место, не так ли? И поэтому можно говорить, что sizeof(Type) означает «размер типа Type», что в свою очередь означает «размер объекта типа Type» (если речь идёт об объектном типе).<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1471705'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>LPBOY &#064; <time class="tag-quote__quoted-time" datetime="2007-03-02T14:26:41+00:00">02.03.07, 14:26</time></span><div class='quote '>1.&quot;У большинства типов-ссылок есть размер.&quot;<br>
2. &quot;Тип – это абстракция, у которой не может быть физического размера.&quot;<br>
Противоречия не замечаешь?</div></div><br>
Нет, не замечаю.<br>
 <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1471705'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>LPBOY &#064; <time class="tag-quote__quoted-time" datetime="2007-03-02T14:26:41+00:00">02.03.07, 14:26</time></span><div class='quote '>Это к чему? </div></div><br>
Ты никогда не задумывался, для чего существует такая штука, как терминология?]]></description>
        <author>Unreal Man</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1471705</guid>
        <pubDate>Fri, 02 Mar 2007 14:26:41 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1471705</link>
        <description><![CDATA[LPBOY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1465619'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Unreal Man &#064; <time class="tag-quote__quoted-time" datetime="2007-02-26T10:02:02+00:00">26.02.07, 10:02</time></span><div class='quote '>По сути ты апеллируешь к понятию физического размера, но ведь он присущ лишь объекту. А что такое тип? Тип – это абстракция, у которой не может быть физического размера.</div></div><br>
Я и говорил о размерах объектов, а не типов. Запись sizeof(Type) означает &quot;размер объекта типа Type&quot;, а не &quot;размер типа Type&quot;.<br>
<br>
Кстати сравни свои аргументы:<br>
1.&quot;У большинства типов-ссылок есть размер.&quot;<br>
2. &quot;Тип – это абстракция, у которой не может быть физического размера.&quot;<br>
Противоречия не замечаешь?<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1465619'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Unreal Man &#064; <time class="tag-quote__quoted-time" datetime="2007-02-26T10:02:02+00:00">26.02.07, 10:02</time></span><div class='quote '>Именно так. Но давай всё же зададимся таким вопросом: как удобнее называть то, что получается, когда мы применяем оператор sizeof к типу-ссылке: «результат применения оператора sizeof» или же «размер»?</div></div><br>
Это к чему? :wacko:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1465619'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Unreal Man &#064; <time class="tag-quote__quoted-time" datetime="2007-02-26T10:02:02+00:00">26.02.07, 10:02</time></span><div class='quote '>Подразумевалась лишь возможность объявления массива объектов, реальное же существование объектов в составе массива в run-time не рассматривалось.</div></div><br>
У меня именно ошибки времени <strong class='tag-b'>компиляции</strong>, никакого рантайма. :)<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1465619'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Unreal Man &#064; <time class="tag-quote__quoted-time" datetime="2007-02-26T10:02:02+00:00">26.02.07, 10:02</time></span><div class='quote '>Ты можешь определить такую структуру, это вполне законно.<br>
...<br>
Этот класс предназначен для того, чтобы определять принадлежность типа T к объектным типам.<br>
...</div></div><br>
Хорошо, но все это в лучшем случае критерий определения объектных типов, но никак не &quot;синоним понятия «объект»&quot;.<br>
<br>
Напомню с чего началась эта дискуссия:<br>
<strong class='tag-b'>Hryak</strong> &gt; нельзя <strong class='tag-b'>узнать</strong> их <em class='tag-i'>(необъектные типы)</em> размер с помощью операции sizeof<br>
<strong class='tag-b'>Unreal Man</strong> &gt; Поправочка: sizeof можно <strong class='tag-b'>применять</strong> к любым типам-ссылкам на объектные типы<br>
У слов &quot;узнать&quot; и &quot;применять&quot; разный смысл. :wall:]]></description>
        <author>LPBOY</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1465619</guid>
        <pubDate>Mon, 26 Feb 2007 10:02:02 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1465619</link>
        <description><![CDATA[Unreal Man: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1464689'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>LPBOY &#064; <time class="tag-quote__quoted-time" datetime="2007-02-25T11:14:50+00:00">25.02.07, 11:14</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=150319&view=findpost&p=1464689'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>LPBOY &#064; <time class="tag-quote__quoted-time" datetime="2007-02-25T11:14:50+00:00">25.02.07, 11:14</time></span><div class='quote '>Тот факт, что sizeof(T&amp;)===sizeof(T) объясняется лишь тем, что любые действия над ссылками сводятся к действиям над объектами, на которые они ссылаются.</div></div><br>
Именно так. Но давай всё же зададимся таким вопросом: как удобнее называть то, что получается, когда мы применяем оператор sizeof к типу-ссылке: «результат применения оператора sizeof» или же «размер»?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1464689'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>LPBOY &#064; <time class="tag-quote__quoted-time" datetime="2007-02-25T11:14:50+00:00">25.02.07, 11:14</time></span><div class='quote '>Как насчет объектов таких классов</div></div><br>
Подразумевалась лишь возможность объявления массива объектов, реальное же существование объектов в составе массива в run-time не рассматривалось. Возможно, более правильно было бы говорить об объектных типах, а не о самих объектах, но у меня что-то не получается это нормально сформулировать применительно к типам :)<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">struct C</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::type_info arr1[2];</div><div class="code_line">&nbsp;&nbsp; &nbsp;A arr2[2];</div><div class="code_line">&nbsp;&nbsp; &nbsp;B arr3[2];</div><div class="code_line">};</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Ты можешь определить такую структуру, это вполне законно. Можно сказать, что arr1 – это массив, элементы которого имеют тип std::type_info. Сущности же необъектных типов не могут быть элементами массива. Т.е. не может быть массива функций и ссылок – такие объявления будут некорректными (ну а сущностей типа void вообще не бывает, что уже говорить про массивы таких сущностей...).<br>
<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">template &#60;class T&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;class IsObject</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;template &#60;class T_&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;static char (&amp;Check(...)) &nbsp; &nbsp; &nbsp;[1];</div><div class="code_line">&nbsp;&nbsp; &nbsp;template &#60;class T_&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;static char (&amp;Check(T_(*)[1])) [2];</div><div class="code_line">&nbsp;</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;static const bool value = sizeof Check&#60;T&#62;(0) - 1;</div><div class="code_line">};</div></ol></div></div></div></div><br>
Этот класс предназначен для того, чтобы определять принадлежность типа T к объектным типам. Если T – объектный тип, то типы T[1] и T(*)[1] являются корректно составленными, и тогда выбирается вторая функция. Если же тип T – необъектный, то T(*)[1] не является корректно составленным типом, и, как следствие, выбирается функция с эллипсисом.]]></description>
        <author>Unreal Man</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1464689</guid>
        <pubDate>Sun, 25 Feb 2007 11:14:50 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1464689</link>
        <description><![CDATA[LPBOY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1464220'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Unreal Man &#064; <time class="tag-quote__quoted-time" datetime="2007-02-24T15:37:10+00:00">24.02.07, 15:37</time></span><div class='quote '>У большинства типов-ссылок есть размер. Под этим размером понимается размер соответствующего типа-нессылки.</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">struct A</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int i;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const double &r;</div><div class="code_line">&nbsp;&nbsp; &nbsp;A():r(1.0){}</div><div class="code_line">};</div></ol></div></div></div></div><br>
равен 8-ми, тогда как<br>
sizeof(int) + sizeof(double) = 4 + 8 = 12<br>
В большинстве реализаций ссылки реализуются посредством указателей и соответственно занимают такой же объем памяти. Хотя в стандарте все же написано &quot;It is unspecified whether or not a reference requires storage&quot;. Тот факт, что sizeof(T&amp;)===sizeof(T) объясняется лишь тем, что любые действия над ссылками сводятся к действиям над объектами, на которые они ссылаются.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1464220'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Unreal Man &#064; <time class="tag-quote__quoted-time" datetime="2007-02-24T15:37:10+00:00">24.02.07, 15:37</time></span><div class='quote '>Есть довольно практичный синоним понятия «объект» – всякая сущность, которая может быть элементом массива.</div></div><br>
Как насчет объектов таких классов<br>
std::type_info,<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">struct A</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;A(int){}</div><div class="code_line">};</div></ol></div></div></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">struct B</div><div class="code_line">{</div><div class="code_line">private: B(){}</div><div class="code_line">};</div></ol></div></div></div></div>]]></description>
        <author>LPBOY</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1464220</guid>
        <pubDate>Sat, 24 Feb 2007 15:37:10 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1464220</link>
        <description><![CDATA[Unreal Man: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1462795'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>LPBOY &#064; <time class="tag-quote__quoted-time" datetime="2007-02-22T18:22:47+00:00">22.02.07, 18:22</time></span><div class='quote '>Применять-то sizeof можно. Но нельзя узнать размер &quot;типа-ссылки&quot;. Т.е. sizeof(Type&amp;) тоже самое, что sizeof(Type). </div></div><br>
Как это понимать? :wacko: У большинства типов-ссылок есть размер. Под этим размером понимается размер соответствующего типа-нессылки. А под размером типа-нессылки понимается размер объекта этого типа.<br>
<br>
Есть довольно практичный синоним понятия «объект» – всякая сущность, которая может быть элементом массива.]]></description>
        <author>Unreal Man</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1462795</guid>
        <pubDate>Thu, 22 Feb 2007 18:22:47 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1462795</link>
        <description><![CDATA[LPBOY: Применять-то sizeof можно. Но нельзя узнать размер &quot;типа-ссылки&quot;. Т.е. sizeof(Type&amp;) тоже самое, что sizeof(Type).]]></description>
        <author>LPBOY</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1359067</guid>
        <pubDate>Tue, 28 Nov 2006 15:39:09 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1359067</link>
        <description><![CDATA[Unreal Man: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Hryak</span><div class='quote '>объектные типы и все остальные (к этим остальным относятся функции, ссылки и тип void. Грубо говоря, это типы, которые нельзя «пощупать», например, нельзя узнать их размер с помощью операции sizeof</div></div><br>
Поправочка: sizeof можно применять к любым типам-ссылкам на объектные типы (хотя типы-ссылки объектными типами действительно не являются).]]></description>
        <author>Unreal Man</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1231064</guid>
        <pubDate>Tue, 22 Aug 2006 17:20:42 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1231064</link>
        <description><![CDATA[Sazabis: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1230774'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Flex Ferrum &#064; <time class="tag-quote__quoted-time" datetime="2006-08-22T13:58:50+00:00">22.08.06, 13:58</time></span><div class='quote '> чем тебя (в таком случае) не устраивает инициализация в стиле &quot;С&quot;:</div></div><br>
не всегда удобно так писать, очень не всегда, например при возврате из функции getZeroPoint или передачи в функцию. Самого &quot;убивала&quot;, такая мелочь. Самый простой выход написать функцию<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">TPoint &nbsp;Point( int, int ); // сразу бросается в глаза неудобство создания POD структуры без каких бы то небыло префиксов.</div></ol></div></div></div></div>]]></description>
        <author>Sazabis</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1230774</guid>
        <pubDate>Tue, 22 Aug 2006 13:58:50 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1230774</link>
        <description><![CDATA[Flex Ferrum: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1230190'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>grustnoe &#064; <time class="tag-quote__quoted-time" datetime="2006-08-22T09:06:31+00:00">22.08.06, 09:06</time></span><div class='quote '>Он введен для удобства - чтобы не писать несколько строк присваиваний для инициализации структуры</div></div><br>
А чем тебя (в таком случае) не устраивает инициализация в стиле &quot;С&quot;:<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">Point pt = {1, 2};</div></ol></div></div></div></div>]]></description>
        <author>Flex Ferrum</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1230274</guid>
        <pubDate>Tue, 22 Aug 2006 09:57:16 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1230274</link>
        <description><![CDATA[LuckLess: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1230190'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>grustnoe &#064; <time class="tag-quote__quoted-time" datetime="2006-08-22T09:06:31+00:00">22.08.06, 09:06</time></span><div class='quote '>Это POD-тип или нет? :)</div></div><br>
нет]]></description>
        <author>LuckLess</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1230204</guid>
        <pubDate>Tue, 22 Aug 2006 09:11:21 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1230204</link>
        <description><![CDATA[Hryak: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1230190'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>grustnoe &#064; <time class="tag-quote__quoted-time" datetime="2006-08-22T09:06:31+00:00">22.08.06, 09:06</time></span><div class='quote '>А если есть простой пользовательский конструктор?</div></div><br>
К сожалению, не-POD , если следовать букве закона, то бишь Стандарта.<br>
Фактически, я не встречался с компиляторами, которые как-то меняли представление объекта при добавлении такого элементарного конструктора. Но это не значит, что их нет...  :)]]></description>
        <author>Hryak</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1230190</guid>
        <pubDate>Tue, 22 Aug 2006 09:06:31 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1230190</link>
        <description><![CDATA[grustnoe: А если есть простой пользовательский конструктор?<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">struct Point</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;Point(int _x, int _y)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;:x(_x), y(_y)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int x;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int y;</div><div class="code_line">};</div></ol></div></div></div></div><br>
<br>
Он введен для удобства - чтобы не писать несколько строк присваиваний для инициализации структуры<br>
<br>
Это POD-тип или нет? :)]]></description>
        <author>grustnoe</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1222395</guid>
        <pubDate>Wed, 16 Aug 2006 11:50:55 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1222395</link>
        <description><![CDATA[Hryak: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=150319&view=findpost&p=1222040'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>barazuk &#064; <time class="tag-quote__quoted-time" datetime="2006-08-16T09:17:22+00:00">16.08.06, 09:17</time></span><div class='quote '>Как видно, только для класса с определенным конструктором инициализация происходит и при объявлении, и при создании экземпляра через new. Для структуры и производного от нее класса - только при создании через new.</div></div><br>
Неправильный вывод.<br>
Никакой инициализации в строке s *ps = new s; не делается. Тебе просто повезло, что operator new вернул обнуленную память. Для гарантии, что члены такой структуры будут обнулены, надо писать s *ps = new s(); <br>
Про инициализацию cni - тут вообще нет инициализации, т.к. конструктор, вызываемый в любом случае, ничего инициализирующего тут не делает. И это никаким боком к рассматриваемой теме не относится.]]></description>
        <author>Hryak</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1222040</guid>
        <pubDate>Wed, 16 Aug 2006 09:17:22 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1222040</link>
        <description><![CDATA[barazuk: Еще одно дополнение - отличие в поведении при простом объявлении и через оператор new. Иллюстрирую кодом:<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;stdio.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">typedef struct tag_s {</div><div class="code_line">&nbsp;&nbsp;int a;</div><div class="code_line">&nbsp;&nbsp;int b;</div><div class="code_line">} s;</div><div class="code_line">&nbsp;</div><div class="code_line">class c : public s {</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp;c() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;a = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;b = 0;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;operator s(){</div><div class="code_line">&nbsp;&nbsp; &nbsp;return *this;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class cni : public s {</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp;cni() {</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;operator s(){</div><div class="code_line">&nbsp;&nbsp; &nbsp;return *this;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">void Dump(s&amp; t, const char* d){</div><div class="code_line">&nbsp;&nbsp;printf(&quot;%5s: %8d %8d\n&quot;, d, t.a, t.b);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main(void)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;cni cni1;</div><div class="code_line">&nbsp;&nbsp;s s1;</div><div class="code_line">&nbsp;&nbsp;c c1;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Dump(c1, &nbsp; &quot;c1&quot;);</div><div class="code_line">&nbsp;&nbsp;Dump(cni1, &quot;cni1&quot;);</div><div class="code_line">&nbsp;&nbsp;Dump(s1, &nbsp; &quot;s1&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;cni *pcni = new cni;</div><div class="code_line">&nbsp;&nbsp;s *ps = new s;</div><div class="code_line">&nbsp;&nbsp;c *pc = new c;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Dump(*pc, &nbsp; &quot;pc&quot;);</div><div class="code_line">&nbsp;&nbsp;Dump(*pcni, &quot;pcni&quot;);</div><div class="code_line">&nbsp;&nbsp;Dump(*ps, &nbsp; &quot;ps&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;delete pcni;</div><div class="code_line">&nbsp;&nbsp;delete ps;</div><div class="code_line">&nbsp;&nbsp;delete pc;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<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">&nbsp;&nbsp; c1: &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp;0</div><div class="code_line">&nbsp;cni1: &nbsp; &nbsp; 2048 &nbsp; &nbsp; &nbsp; &nbsp;0</div><div class="code_line">&nbsp;&nbsp; s1: &nbsp; &nbsp; 2048 &nbsp; &nbsp; &nbsp; &nbsp;4</div><div class="code_line">&nbsp;&nbsp; pc: &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp;0</div><div class="code_line">&nbsp;pcni: &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp;0</div><div class="code_line">&nbsp;&nbsp; ps: &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp;0</div></ol></div></div></div></div><br>
<br>
Как видно, только для класса с определенным конструктором инициализация происходит и при объявлении, и при создании экземпляра через new. Для структуры и производного от нее класса - только при создании через new.]]></description>
        <author>barazuk</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1203370</guid>
        <pubDate>Thu, 03 Aug 2006 17:19:57 +0000</pubDate>
        <title>Кто такие POD и не-POD типы</title>
        <link>https://forum.sources.ru/index.php?showtopic=150319&amp;view=findpost&amp;p=1203370</link>
        <description><![CDATA[Hryak: <ol class="tag-list" type="I"><li><strong class='tag-b'>Краткий экскурс в местоположение POD и non-POD-типов в системе типов C++.</strong><br>
Тут всё просто – все типы делятся на две группы: объектные типы и все остальные (к этим остальным относятся функции, ссылки и тип <span class="tag-color tag-color-named" data-value="blue" style="color: blue">void</span>. Грубо говоря, это типы, которые нельзя «пощупать», например, нельзя узнать их размер с помощью операции <span class="tag-color tag-color-named" data-value="blue" style="color: blue">sizeof</span>). Группа объектных типов содержит две подгруппы – POD и не-POD типы.<br>
</li><li><strong class='tag-b'>Определение.</strong><br>
POD – это аббревиатура от “Plain Old Data”, литературно я бы это перевёл как «Простые данные в стиле C»<br>
</li><li><strong class='tag-b'>Содержание.</strong><br>
К POD-типам относятся:<ol class="tag-list" type="1"><li>все встроенные арифметические типы (включая <span class="tag-color tag-color-named" data-value="blue" style="color: blue">wchar_t</span> и <span class="tag-color tag-color-named" data-value="blue" style="color: blue">bool</span>);</li><li>энумераторы, т.е. типы, объявленные с помощью ключевого слова <span class="tag-color tag-color-named" data-value="blue" style="color: blue">enum</span>;</li><li>все указатели;</li><li>POD-структуры (<span class="tag-color tag-color-named" data-value="blue" style="color: blue">struct</span> или <span class="tag-color tag-color-named" data-value="blue" style="color: blue">class</span>) и POD-объединения (<span class="tag-color tag-color-named" data-value="blue" style="color: blue">union</span>), которые удовлетворяют всем нижеприведенным требованиям:<ol class="tag-list" type="a"><li>не содержат пользовательских конструкторов, деструктора или копирующего оператора присваивания (копирующий оператор присваивания – это такой нешаблонный нестатический <span class="tag-color tag-color-named" data-value="blue" style="color: blue">operator=</span>, у которого есть строго один параметр типа <em class='tag-i'>X</em>, <em class='tag-i'>X&amp;</em>, <em class='tag-i'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">const</span> X&amp;</em>, <em class='tag-i'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">volatile</span> X&amp;</em> или <em class='tag-i'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">const volatile</span> X&amp;</em>, где <em class='tag-i'>X</em> – тип рассматриваемой структуры или объединения);</li><li>не имеют базовых классов;</li><li>не содержат виртуальных функций;</li><li>не содержат защищенных (<span class="tag-color tag-color-named" data-value="blue" style="color: blue">protected</span>) или закрытых (<span class="tag-color tag-color-named" data-value="blue" style="color: blue">private</span>) нестатических членов данных;</li><li>не содержат нестатических членов данных не-POD-типов (или массивов из таких типов), а также ссылок.</li></ol></li></ol>Соответственно, все оставшиеся объектные типы являются не-POD-типами.<br>
Примечание: наличие квалификаторов <span class="tag-color tag-color-named" data-value="blue" style="color: blue">const</span> и <span class="tag-color tag-color-named" data-value="blue" style="color: blue">volatile</span> не влияет на «POD-овость» типа.<br>
</li><li><strong class='tag-b'>Отличия в поведении POD и не-POD типов.</strong><br>
Впрочем, сами отличия описывать не буду – их много – лучше опишу основную причину этих отличий: для не-POD-типа нельзя сделать (практически) никаких предположений о том, как устроен объект. Внутри такого объекта в (практически) произвольном месте могут располагаться служебные области, неподконтрольные программисту. Например, рассмотрим POD-тип S:<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">struct S</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;char c;</div><div class="code_line">&nbsp;&nbsp;int i;</div><div class="code_line">// protected:</div><div class="code_line">&nbsp;&nbsp;char sz[10];</div><div class="code_line">} s1, s2;</div><div class="code_line">&nbsp;</div><div class="code_line">&amp;s1 == &amp;s1.c; // (1) всегда истина</div><div class="code_line">&amp;s1.i == &amp;s1.c + 1 + выравнивание; // (2) всегда истина</div><div class="code_line">&amp;s1.i &#62; &amp;s1.c; // (3) всегда истина</div><div class="code_line">&amp;s1.sz &#62; &amp;s1.i; // (4) всегда истина</div><div class="code_line">&nbsp;</div><div class="code_line">memset(&amp;s1, 0, sizeof s1); // (5) обнуление объекта</div><div class="code_line">memcpy(&amp;s1, &amp;s2, sizeof s1); // (6) копирование объекта</div></ol></div></div></div></div><br>
Все подобные штучки-дрючки (адресная арифметики, побитовая работа с объектом целиком и пр.) <strong class='tag-b'>неприменимы</strong> для не-POD-типов. Раскомментированием <em class='tag-i'>&quot;//<span class="tag-color tag-color-named" data-value="blue" style="color: blue">protected:</span>&quot;</em> приведенная структура превращается в не-POD-структуру. Во многих компиляторах формат представления в памяти объекта из данного примера не изменится, и все приведенные операции будут продолжать работать по-прежнему, но тем не менее, Стандартом С++ это не гарантируется (кроме условия (3)). С другой стороны, добавление виртуальной функции, например, практически на всех компиляторах вызовет нарушение (1) и некорректную работу (5). Вообщем, лучше полагаться на Стандарт, и всегда избегать делать предположения о представлении объекта в памяти.<br>
</li><li><strong class='tag-b'>Для чего придуман такой геморрой с поддержанием в языке обоих типов объектов.</strong><br>
Это всё от двуликости С++, от того, что он не является чистым ООП-языком. POD-объекты введены для обеспечения совместимости с C. А формат представления не-POD-объектов не задокументирован для того, чтобы не связывать руки производителям компиляторов в их стремлении придумывать наиболее эффективные способы реализации всех задумок создателей языка (тем более, что на разных платформах эти способы могут сильно разниться).<br>
</li><li><strong class='tag-b'>Что делать любителям играться с битами представления объекта (по типу (5) )</strong><br>
Перестать играться с битами. Зачастую такая игра показывает, что программист пытается на С++ писать в стиле С – это неразумно.<br>
<br>
Я говорить так, как говорят Саттер с Александреску, не умею, поэтому лучше пусть говорят они в завершение данной статьи:<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Just define types appropriately, then read and write data using those types instead of thinking bits and words and addresses. The C++ memory model ensures efficient execution without forcing you to rely on manipulating representation. So don&#39;t.<br>
/ Просто определите типы корректно, затем читайте и записывайте данные, используя эти типы вместо работы с битами, словами и адресами. Модель памяти С++ обеспечивает эффективную работу, не заставляя Вас работать с представлением данных в памяти. Так и не делайте этого. / </div></div></li></ol>]]></description>
        <author>Hryak</author>
        <category>C/C++ FAQ</category>
      </item>
	
      </channel>
      </rss>
	