میخواهیم عبارت “!Hello DIGILOGIST” را در صفحه نمایش یا یک فایل متنی چاپ کنیم:
std::cout "Hello DIGILOGIST!";
شاید فکر کنید پردازنده به محض دیدن این دستور، کارکترها را برای مقصد ارسال میکند. اما در عمل این اتفاق نمیافتد.
اجازه بدید با یک استعاره توضیح بدم. فرض کنید میخواهیم با تاکسی از ابتدای مسیر خطی به مقصدمان برویم. احتمالاً شما هم این تجربه را داشتید که تاکسیها اغلب در نقطهی شروع بلافاصله پس از سوار شدن اولین مسافر حرکت نمیکنند. کمی صبر میکنند تا ماشین پر شود و بعد حرکت کنند. گاهی هم اتفاق میافتد که بعد از مدتی صبر کردن با وجود صندلی خالی حرکت کنند تا حداقل مسافران سوار شده پشیمان نشوند. میدونیم دلیل این کار این هست که برای راننده به صرفه نیست خالی حرکت کند. اون به هر حال داره هزینهای بابت زمان، سوخت و استهلاک ماشین میپردازد. پس بهینه است که با حداکثر تعداد ممکن مسافر حرکت کند. اصلاً به همین دلیل هم هست که هزینهی پرداختی ما نسبت به گرفتن ماشین دربست کمتر است.
اما گاهی عجله داریم و میخواهیم بلافاصله پس از سوار شدن، تاکسی حرکت کند. در اینجا باید سر کیسه را شل کنیم و علاوه بر کرایهی خودمان بابت صندلیهای خالی هم کرایه را پرداخت کنیم.
درست مشابه همین وضعیت را ما در اینجا داریم. پردازنده کارکترها را در بافری نگه میدارد و هر از گاهی این بافر را خالی میکند. اینطوری راندمان بیشتری خواهیم داشت. البته گاهی هم نیاز داریم که بافر خالی شود و هزینهاش را هم میدهیم. به اینکار Flush Buffer میگویند. (درست مثل زدن دکمهی فلاش تانک سرویس بهداشتی!)
در ظاهر استفاده از ‘\n’ به صورت زیر:
std::cout << "Hello DIGILOGIST! \n";
یا std::endl به این صورت:
std::cout << "Hello DIGILOGIST!" << std::endl;
یک نتیجه دارد و آن رفتن به خط بعد است. اما تفاوت این دو دستور در این است که std::endl علاوه بر رفتن به خط بعد، بافر را هم خالی میکند. در نتیجه اگر نیازی به این کار ندارید بهتر است از ‘\n’ برای رفتن به خط بعد استفاده کنید تا برنامهی شما راندمان بیشتری داشته باشد.