Рассмотрим следующий класс, который может находиться либо в «непустом», либо в «пустом» состоянии, а в «пустом» состоянии другой элемент инициализируется по умолчанию (следовательно, имеет неопределенное значение):
struct MaybeInt {
bool has_value;
int value;
MaybeInt() : has_value(false) {}
MaybeInt(int v) : has_value(true ), value(v) {}
};
Разрешено ли присваивать из построенного по умолчанию MaybeInt
, например:
MaybeInt empty, another;
another = empty; // OK?
Как насчет строительства?
MaybeInt empty, another(empty); // OK?
Изменится ли ответ, если MaybeInt::value
имеет тип char
?