Вопрос простой. Можно ли построить такой тип T, для которого следующие два объявления переменных будут давать разные результаты?
T t1 = {};
T t2{};
Я копался в cppreference и стандарте уже больше часа, и Я понял следующее:
T t2{};
- это инициализация значения . Никаких сюрпризов. T t1 = {}
- это инициализация списка с пустым списком в фигурных скобках.
Но последний вариант сложен, поскольку «эффекты инициализации списка» - впечатляющий ... список. Что для классов, фундаментальных типов и агрегатов, похоже, сводится к инициализации значений. Но я не уверен, что ничего не пропустил.
Может быть, вы можете предоставить контекст, в котором два объявления будут иметь разные эффекты?
UPD: Отлично ответы про explicit
конструкторы! Следующий уровень: возможно ли, что оба оператора компилируются, но по-разному влияют на время компиляции / выполнения?