Ваш первый пример имеет неопределенное поведение, потому что по умолчанию конструктор копирования, сгенерированный компилятором, будет выполнять копирование по элементам, int
s может иметь значения перехвата, а чтение значения перехвата для его копирования может вызвать сбой программы.
На практике, я не могу представить, чтобы это когда-либо действительно рухнуло;компилятор почти наверняка оптимизирует копию, и даже если этого не произойдет, он, скорее всего, будет использовать специальную побитовую копию, которая будет копировать, не проверяя значения перехвата.(В C ++ вы гарантированно сможете копировать байты.)
Во втором случае, опять же, неопределенное поведение.Хотя в этом случае у вас есть назначение, а не конструкция копирования, и компилятор с меньшей вероятностью его оптимизирует.(В первом примере назначения нет, только конструкция копирования.)
Для третьего - да.Инициализатор с пустыми скобками (и не определяемый пользователем инициализатор по умолчанию для его переопределения) сначала выполняет нулевую инициализацию (точно так же, как это происходит для переменных со статическим временем жизни).