Здравствуйте, _nn_, Вы писали:
M>>Кстати, о следующем способе value-инициализации почему-то мало кто вспоминает.
Потому что, какая разница, как value-инициализировать, =T() или ={}.
Последняя форма, правда, неприменимо к одиночным не-POD-ам, — только к массивам.
__>А что должно происходит если есть член класса с конструктором ?
Или если есть vfptr
__>b.i — -858993460
Это который компилятор? gcc 4.5? Аха, значит, недофиксали.
Здравствуйте, SleepyDrago, Вы писали:
SD>вы вдвоем с _nn_ меня просто убиваете. Смотрите — если кому то нужна инициализация, то он может ее написать руками 1 раз на тип. Правильно? Они напихали мемсеты почти везде и при этом оставили дырку в виде выделения на стеке, которая все равно требует явного написания тех же самых инициализаторов, чтобы не писать их каждый раз. Имхо мне нужны оба вида инициализации и задающиеся непересекающимся между собой образом.
Мы-то тут при чём? Мы в комитет по стандарту не входим. Вот они тебя пускай убивают, сколько влезет.
Нужны оба способа? Так оба способа и есть. Где там дырки на стеке???
struct Foo
{
int x[1000];
// и никаких конструкторов
};
void buz(const Foo&);
void bar()
{
Foo f; // default/не инициализирована
Foo g = {}; // value-инициализирована
Foo h = Foo(); // value-инициализирована
Foo *pf = new Foo; // default/не инициализирована
Foo *ph = new Foo(); // value-инициализирована
buz(Foo()); // value-инициализирована
buz(Holder<Foo>()); // default/не инициализирована - вот здесь пришлось надстраиваться над синтаксисом
}
SD>А теперь с приходом gcc 4.4 в редхате, который исправляет "баг" с принудительной value-инициализацией pod членов классов, наступает java головного мозга. Код который всю жизнь был совместим с C по структурам придется обкладывать пустыми конструкторами, чтобы ... он был совместим с С хотябы по поведению.
В чём заключается совместимость? В том, чтобы поля были не инициализированы и содержали мусор? Можно считать, что нули — это такой специальный мусор.
SD>Шаблонные Холдеры это к санитарам. Туда же и с предложениями держать все структуры а-ля "прямоугольник" в двойном числе. SD>первое правило: "меньше кода — меньше проблем".
Нафигачить пустые конструкторы в каждую структуру — это "меньше кода"?
Конечно, зависит от соотношения, сколько типов и сколько мест, где эти переменные создаются.
Я предположил, что "делал себе пул" означает, что был сделан некий шаблон, куда подставлялись разные типы структур. Из-за чего и пришлось пропатчить все структуры, чтобы мемсетами не замучило. Ну, так можно пропатчить непосредственно шаблон.
SD>YMMV разумеется
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, SleepyDrago, Вы писали:
SD>>вы вдвоем с _nn_ меня просто убиваете. Смотрите — если кому то нужна инициализация, то он может ее написать руками 1 раз на тип. Правильно? Они напихали мемсеты почти везде и при этом оставили дырку в виде выделения на стеке, которая все равно требует явного написания тех же самых инициализаторов, чтобы не писать их каждый раз. Имхо мне нужны оба вида инициализации и задающиеся непересекающимся между собой образом.
К>Мы-то тут при чём? Мы в комитет по стандарту не входим. Вот они тебя пускай убивают, сколько влезет. К>Нужны оба способа? Так оба способа и есть. Где там дырки на стеке???
Вы явно вошли в фанклуб любителей memset'а — вот этим и убиваете. Из-за того что людей которые "непожлобились" на левый мемсет стало много вообще и началась эта затея с _изменением_ семантики уже существующего кода на плюсах.
Дырка в их абстракции тотального обнуления. Его нет когда объект просто объявлен на стеке.
...
К>Нафигачить пустые конструкторы в каждую структуру — это "меньше кода"?
Этим структурам не нужна value initialization. Никогда. Поэтому из-за этих редисок этот код стал обязательным.
предложение бороться с шаблонами с помощью шаблонов принимается. К счастью это действительно редко нужно.
К>твоя гонка за скоростью, твой и mileage
ну это имхо единственное оправдание при использовании "портабельного ассемблера наших дней". Во всех остальных случаях те кто идут по более "декларативным" путям выигрывают во всем.
Здравствуйте, SleepyDrago, Вы писали:
SD>Вы явно вошли в фанклуб любителей memset'а — вот этим и убиваете.
Ты видишь то, чего нет. Во всяком случае, в отношении меня.
Мне вообще пофиг на принудительные мемсеты. Если мне надо, я постараюсь написать так, чтобы оно гарантированно произошло, а если мне не надо, не забиваю себе голову. Какая разница, чем замусоривать, нулями или CDCDCDCD.
SD>Из-за того что людей которые "непожлобились" на левый мемсет стало много вообще и началась эта затея с _изменением_ семантики уже существующего кода на плюсах.
Это когда они не пожлобились на изменение семантики? В 1998 стандарте был дефект, — возможность трактовать как попало. Этот дефект постарались устранить (не до конца).
SD>Дырка в их абстракции тотального обнуления. Его нет когда объект просто объявлен на стеке.