Почему конструктор std :: in_place_t по умолчанию и явный?

scanf оставляет пробел во входном буфере, включая символы новой строки. Чтобы использовать fgets для чтения следующей строки, вам нужно вручную удалить оставшуюся часть текущей строки:

int c;
do{
    c = getchar();
}while(c != EOF && c != '\n');
7
задан Jarod42 18 March 2019 в 17:40
поделиться

2 ответа

Вы хотите, чтобы подобный тип был только explicit конструируемым, потому что он существует для обозначения определенного вида перегрузки конструктора в местах, где {} может быть разумно найдено.

Рассмотрим следующие конструкции

std::optional<DefaultConstructible> dc1({}); // dc1 == std::nullopt
std::optional<DefaultConstructible> dc2(std::in_place); // dc2 == DefaultConstructible()
0
ответ дан Caleth 18 March 2019 в 17:40
поделиться

Если вы пропустите конструктор, это не будет explicit. Если вы не = default, это не будет тривиальным .

Итак, если вы хотите, чтобы конструктор был explicit, и вы также хотите, чтобы он оставался тривиальным, то, что вы видите, является единственной доступной опцией.

0
ответ дан Jesper Juhl 18 March 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: