Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.40.43] |
|
Страницы: (42) « Первая ... 36 37 [38] 39 40 ... Последняя » ( Перейти к последнему сообщению ) |
Сообщ.
#556
,
|
|
|
Отсутствие инициализации - тоже инициализация. Офигительная казуистика.
|
Сообщ.
#557
,
|
|
|
Цитата MyNameIsIgor @ Мой вопрос то в другом: почему она разная? Для одних типов я получаю неопределённое поведение, а для вторых - нет. В языке разные типы имеют разный "статус". Одни требуют вызов конструктора, другим он не нужен. Это же очевидно. |
Сообщ.
#558
,
|
|
|
Цитата JoeUser @ Цитата MyNameIsIgor @ Мой вопрос то в другом: почему она разная? Для одних типов я получаю неопределённое поведение, а для вторых - нет. В языке разные типы имеют разный "статус". Одни требуют вызов конструктора, другим он не нужен. Это же очевидно. Для меня это не очевидно |
Сообщ.
#559
,
|
|
|
Цитата MyNameIsIgor @ Хорошо, давайте zero initialization изменим. Кстати, а почему пустая строка? Мне вот "abcd" нравится. Так вот об том и речь: умолчательное поведение оно - как средняя температура по больнице. Цитата MyNameIsIgor @ Не получится - например, при присваивании полезет удалять память по мусорному адресу. inet_addr - это POD-тип. Кто, куда и для чего полезет? Или, вот, другой пример. CRITICAL_SECTION. Для этой POD-структуры никакого варианта адекватной инициализации по умолчанию просто не существует - нужно спец. функцию вызывать. Умолчательные значения для хэндлов в той же винде - очень сильно зависят от того, что это за хэндл. Где-то - 0, где-то - -1, где-то - nullptr. Весёлый такой зоопарк, да? И как с этим должно справляться zero-initialization по-умолчанию? В коде будет просто феерия, сложно отлавливаемая. Если, как написал Крайзер, обращение к неинциализированной переменной-хендлу ты ещё можешь отловить, то вот обращение к неправильно инициализированному хендлу - уже нет. Добавлено Цитата applegame @ Отсутствие инициализации - тоже инициализация. Офигительная казуистика. Ну ты стандарт то открой. |
Сообщ.
#560
,
|
|
|
Цитата Flex Ferrum @ inet_addr - это POD-тип. Кто, куда и для чего полезет? std::vector полезет, если его конструуктор по умолчанию не проставит нулевой размер имеющихся данных. |
Сообщ.
#561
,
|
|
|
Цитата JoeUser @ В D все флоаты по умолчанию заполняются именно NaN - http://dlang.org/type Кстати, смех смехом, а тогда бы любую переменную можно было бы инициализировать не подобием 0, NULL, nullptr - а однозначным NAN и ловить эксепшены при использовании неинициализированных переменных. Но это еще один слой жирка в и без того знатно пополневший Си. Поверь, жирка от инициализации по умолчанию, практически нет. |
Сообщ.
#562
,
|
|
|
Цитата Flex Ferrum @ Или, вот, другой пример. CRITICAL_SECTION. Для этой POD-структуры никакого варианта адекватной инициализации по умолчанию просто не существует - нужно спец. функцию вызывать. Умолчательные значения для хэндлов в той же винде - очень сильно зависят от того, что это за хэндл. Где-то - 0, где-то - -1, где-то - nullptr. Весёлый такой зоопарк, да? А сейчас он не весёлый, а вполне предсказумый что ли, с мусором то? Хуже не станет. |
Сообщ.
#563
,
|
|
|
Цитата applegame @ Отсутствие инициализации - тоже инициализация. Офигительная казуистика. Ничего странного. Инициализация - двухфазная операция (выделение памяти + приведение данных в изначальное рабочее состояние). Для встроенных типов вторая фаза не всегда нужна. Ее и не навязывают. Это нормально. Для библиотечних типов такое допустить нельзя, иначе объект будет в нестабильном состоянии. Встроенные типы на 100% функциональны сразу же после выделения памяти. |
Сообщ.
#564
,
|
|
|
Цитата MyNameIsIgor @ А сейчас он не весёлый, а вполне предсказумый что ли, с мусором то? Хуже не станет. Сейчас ты его статиканализаторами отловить можешь. Цитата MyNameIsIgor @ std::vector полезет, если его конструуктор по умолчанию не проставит нулевой размер имеющихся данных. Нет. Потому что у inet_addr нет конструктора и деструктора. |
Сообщ.
#565
,
|
|
|
Скрытый текст Цитата applegame @ Поверь, жирка от инициализации по умолчанию, практически нет. Я еще до D толком не добрался, всему свое время. Пока не разберусь с D под LLVM, учить ниче не буду)) |
Сообщ.
#566
,
|
|
|
Цитата Flex Ferrum @ Нет. Потому что у inet_addr нет конструктора и деструктора. А память то, память std::vector вернуть системе не желает? |
Сообщ.
#567
,
|
|
|
Цитата MyNameIsIgor @ А память то, память std::vector вернуть системе не желает? Так память то он вернёт. Тут ведь фишка в том, что именно будет в этой памяти. |
Сообщ.
#568
,
|
|
|
Цитата Flex Ferrum @ Так память то он вернёт. Тут ведь фишка в том, что именно будет в этой памяти. Как же он её вернёт, если указатель на данные будет мусорным? Это не говоря о том, что обращение к такой переменной - неопределённое поведение. Напоминаю, я говорю о случае, когда std::vector не будет инициализировать свои поля в конструкторе по умолчанию. Добавлено Цитата Flex Ferrum @ Сейчас ты его статиканализаторами отловить можешь. Они могут отловить и при инициализации нулями исходя из того, что с критической секцией будут делать. |
Сообщ.
#569
,
|
|
|
Цитата MyNameIsIgor @ Как же он её вернёт, если указатель на данные будет мусорным Э... Что-то ты, видимо, не понимаешь. POD-структура занимает какой-то кусок памяти, равный по размеру её sizeof. Никого не интересует, что там в этом куске памяти. Вектор - в том числе. Его задача - выделить этот кусок и вернуть обратно при разрушении. А то, что там будет мусор (в полях POD-структуры) - так это не проблема vector'а. |
Сообщ.
#570
,
|
|
|
Цитата Flex Ferrum @ Э... Что-то ты, видимо, не понимаешь. Давайте поймём что. Я говорю, что будь комитет последовательным, он требовал, чтобы std::vector<T> v; не тратило такты, как не тратит int x; Это может быть только тогда, когда конструктор по умолчанию не будет прописывать что-то в поля. В таком случае при операция с таким вектором мы получим неопределённое поведение, и как пример я указал присваивание ему другого вектора. И это не зависит от того, является ли T POD или не POD. Чего я не понимаю? |