اذهب إلى المحتوى

السؤال

نشر

أرى في كثير من الأحيان إستخدام الرمز n\ في نهاية النص عند الطباعة وفي أحيان أخرى أجد أن الكود يستعمل std::endl في نهاية النص، لذلك ما الفرق بين الكود التالي:

std::cout << "Hello, Wolrd\n";

وهذا الكود:

std::cout << "Hello, Wolrd" << std::endl;

 

Recommended Posts

  • 1
نشر

عندما تحاول أن تقوم بطباعة أكثر من نص، لإغنه يتم تخزين هذه النصوص في ما يسمى بـ Buffer وبعد ذلك يتم عرض كل النصوص مرة واحدة على الشاشة (أو كتابتها في ملف) وتسمى هذه العملية بالصرف flushing، فعلى سبيل المثال:

#include <iostream>
  
int main() {
  for (char i='A'; i <= 'Z'; i++)
  {
    std::cout << i << endl;
  }
  return 0;
}

الكود السابق يقوم بطباعة الحروف من A إلى Z وفي كل دورة يتم عمل صرف Flushing للنص وإظهاره على الشاشة. بينما في الكود التالي:
 

#include <iostream>

int main() {
  for (char i='A'; i <= 'Z'; i++)
  {
    std::cout << i << "\n";
  }
  return 0;
}

فإنه يتم تخزين كل الحروف الـ Buffer وبعد ذلك يتم عرض كل الحروف مرة واحدة.

بالتأكيد فإن الكود الثاني أفضل من ناحية الأداء لأن الكود يقوم بعرض الحروف مرة واحدة على الشاشة، بينما الكود الأول يقوم بعمل Flushing لكل حرف في كل دورة. لذلك يفضل دائمًا أن تستعمل الرمز n\ قدر الإمكان بدلًا من إستخدام std::endl

ملاحظة أخرى وهي أنه يمكن إستخدام الرمز n\ في نهاية النص كالتالي:

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

std::cout << "Hello" << std::endl;

لاحظ أن السطر الأول يقوم بإستخدام المعامل >> مرة واحدة بينما السطر الثاني فإن يقوم بإستدعاء المعامل >> مرتين، وهذا الأمر قد يؤثر على أداء البرامج التي تعتمد على الخيوط  threads بشكل أساسي.

بالتوفيق، تحياتي.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...