الفرق بين std::endl و (فيما يتعلق بالوعي بالنظام الأساسي)

StackOverflow https://stackoverflow.com//questions/9699280

  •  13-12-2019
  •  | 
  •  

سؤال

قبل أن تعلن أن هذا السؤال نسخة مكررة من هذا أو الذي - التي, ، يرجى مراعاة أنني أرسلت مشكلة إلى القاضي على الانترنت مع \n وحصلت على WA، ثم مع std::endl وحصلت على تكييف.لذا، أحتاج إلى إجابة محددة جدًا لهذه النقطة الوعي بالمنصة:يكون \n حقًا النظام الأساسي مدرك، وهل يكتب وقت التشغيل حقًا السطر الصحيح الذي ينتهي وفقًا للنظام الأساسي كما تدعي الإجابات على الأسئلة الأخرى؟إذا كان الأمر كذلك، هل يمكن أن تخبرني كيف حدث هذا؟؟

إذا كان من الممكن دعم الإجابة باقتباس من المعيار فيما يتعلق بمسألة الوعي بالمنصة، سأكون ممتنًا حقًا.لقد قرأت إجابات جميع الأسئلة الأخرى (حتى تلك المغلقة)، لذا يرجى عدم تكرار أمر "مسح المخزن المؤقت".

هل كانت مفيدة؟

المحلول

من C++11, §27.7.3.8 -

namespace std
{
    template <class charT, class traits>
        basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
}

التأثيرات: يستدعي os.put(os.widen(' '))، ثم os.flush().

العوائد: نظام التشغيل.

لذلك، من المعيار فمن الواضح أن endl يمسح المخزن المؤقت لدفق الإخراج، بينما \n لا.عموما سوف ترغب في استخدامها endl لطباعة سطر جديد، ولكن يجب أيضًا أن تضع في اعتبارك أنه في كل مرة تقوم فيها بذلك، سيتم مسح المخزن المؤقت للإخراج أيضًا.

حول منصة الوعي

من الواضح من المعيار أن كلاهما يفعلان نفس الشيء تمامًا - طباعة سطر جديد بنفس الطريقة تمامًا.لذلك، إذا كان أحدهما مستقلاً عن النظام الأساسي، فيجب أن يكون الآخر هو نفسه أيضًا.منذ أن أعرف بالتأكيد endl منصة مستقلة، وينبغي أن يكون الأمر نفسه بالنسبة \n.

نصائح أخرى

std::endl هو مناور الذي النواتج '\n', ، ثم يقوم بمسح الدفق.بالنسبة لمعظم الاستخدامات غير الرسمية، هذا هو ما يجب أن تستخدمه.ومع ذلك، عند إخراج كميات كبيرة من البيانات، يمكن أن يؤدي ذلك إلى تحقيق أداء كبير، وفي هذه الحالة، استخدم '\n'.

يحرر:

فيما يتعلق بالتوعية بالمنصة:كلاهما يخرج نفس الشيء تمامًا.إذا تم فتح الدفق في وضع النص، فسيتم '\n' سيؤدي إلى حدوث تمثيل يعتمد على النظام الأساسي لنهاية السطر:0x0A ضمن Unix، 0x0D، 0x0A ضمن Windows، بدء سجل جديد ضمن بعض الحواسيب المركزية، وما إلى ذلك.إذا تم فتح الدفق في الوضع الثنائي، فسيؤدي ذلك إلى إخراج بايت واحد (عادةً 0x0A، ولكنه يعتمد في الواقع على ترميز الأحرف الأساسي المستخدم).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top