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


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

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

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

1 2

1 ответ:

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

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