scanf
оставляет пробел во входном буфере, включая символы новой строки. Чтобы использовать fgets для чтения следующей строки, вам нужно вручную удалить оставшуюся часть текущей строки:
int c;
do{
c = getchar();
}while(c != EOF && c != '\n');
Вы хотите, чтобы подобный тип был только explicit
конструируемым, потому что он существует для обозначения определенного вида перегрузки конструктора в местах, где {}
может быть разумно найдено.
Рассмотрим следующие конструкции
std::optional<DefaultConstructible> dc1({}); // dc1 == std::nullopt
std::optional<DefaultConstructible> dc2(std::in_place); // dc2 == DefaultConstructible()
Если вы пропустите конструктор, это не будет explicit
. Если вы не = default
, это не будет тривиальным .
Итак, если вы хотите, чтобы конструктор был explicit
, и вы также хотите, чтобы он оставался тривиальным, то, что вы видите, является единственной доступной опцией.