Инициализация примитивных встроенных типов

Я немного запутался в том, как инициализировать встроенный тип, такой как int или double. Я говорю об инициализации копирования и прямой инициализации:

int a = 0; // copy initialization
int b(0);  // direct initialization 

Каковы лучшие практики? Доступна ли прямая инициализация для всех версий C++?


person Burrich    schedule 07.02.2016    source источник


Ответы (1)


«лучшая практика», вероятно, не может быть четко сформулирована - некоторые люди предпочитают одно, некоторые другое, и современные компиляторы должны делать одно и то же для обоих, если только ваш конструктор для пустого объекта не делает вещи, которые компилятор не может устранить. Для базовых типов, которые компилятор знает изначально, сгенерированный код должен получиться идентичным [возможно, НЕКОТОРЫЕ компиляторы делают тонкие различия, потому что код идет другим путем или что-то в этом роде, поэтому генерация кода происходит в немного другом порядке, что приводит к различным наборам оптимизация или другое распределение регистров и т. д., но в целом я был бы разочарован, если бы была какая-либо измеримая разница]

Я не знаю версии C++, которая не поддерживает оба типа для простых типов. Очевидно, что для классов и других сложных объектов это в некоторой степени зависит от того, какие конструкторы и тому подобное доступны.

person Mats Petersson    schedule 07.02.2016