Первый инициализирует price
с помощью x
, а второй инициализирует price
его значением по умолчанию (по умолчанию создает его; в случае переменной int
инициализируется неопределенным значением), а затем копирует x
в price
.
Другими словами, первый почти эквивалентен
int price = x;
где второй почти эквивалентен
int price;
price = x;
В случае переменной int
(учитывая также оптимизацию компилятора) я полагаю, что нет эффективной разницы.
Но когда price
- сложный объект, требующий больших затрат на строительство, разница может быть большой.
Как лучше объяснит Питер: «Разница между двумя сложными объектами заключается не в стоимости строительства. Вопрос в том, является ли переназначение после инициализации по умолчанию более затратным, чем инициализация в один шаг. На практике двухэтапный процесс часто бывает дороже. (различными способами), чем прямая инициализация, так как может потребоваться очистить настройку по умолчанию, чтобы изменить значение. Есть также проблемы с безопасностью исключений - что, если переназначение или построение вызовет исключение ».
Поэтому обычно настоятельно рекомендуется использовать первое решение (инициализировать объект с правильным значением).
См. Также ответ Зерегеса, который обращает внимание на тот факт, что первый метод является единственным доступным для присвоения значения константному члену.
Действительно ты не можешь писать
int const price;
price = x; // error: price is const
person
max66
schedule
10.11.2018
int price;
- person Aganju   schedule 11.11.2018