в поисках ясности относительно std::cout и std::endl

Я пытаюсь лучше понять, что происходит с buffer, когда мы не используем std::endl после std::cout.

Давайте рассмотрим следующий фрагмент кода C++:

int main(int argc, char** argv) {

    std::cout << "Hello World!";
    return 0;
}   

Насколько я понимаю, std::cout добавит строку Hello World! к buffer. Если мы не добавим std::endl в конце кода - std::cout << "Hello World!" << std::endl; , следует или не следует ожидать, что Hello World! будет напечатано в качестве вывода?


person skpro19    schedule 14.05.2021    source источник


Ответы (2)


Да, поскольку все потоки сбрасываются в своих деструкторах, а глобальный объект std::cout будет уничтожен при выходе из программы, строка будет напечатана.

Обратите внимание, однако, что в конце напечатанной строки не будет символа новой строки, поэтому приглашение консоли будет выглядеть необычно (и уродливо), если ваше обычное приглашение следует сразу за Hello World!.

person SergeyA    schedule 14.05.2021
comment
скажем, мы добавляем while(true); после std::cout <<"Hello World!";. Будет ли в этом случае печататься Hello World! на терминале? - person skpro19; 17.05.2021
comment
@ skpro19, скорее всего, нет. - person SergeyA; 17.05.2021
comment
Но это не гарантировано. Это? - person skpro19; 18.05.2021
comment
@ skpro19 нет, это не гарантируется, но я был бы удивлен, если бы этого не произошло. - person SergeyA; 18.05.2021

Чтобы предотвратить уродство, упомянутое SergeyA, но при этом не вводить ‹‹ std::endl, мы обычно пишем

std::cout << "Hello World!\n";

\n заставляет новую строку после вывода.

person ravenspoint    schedule 14.05.2021