Примитивная встроенная инициализация типов

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

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

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

2

Решение

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

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

2

Другие решения

Других решений пока нет …