في C ++ ما هو الفرق الأساسي بين الأمراض المنقولة جنسياً:: cout و fprintf؟ هل الأفضل أو أسرع من الآخر؟
الاجابه 1:
باستخدام std :: cout ، يتم استدعاء العامل الزائد << على الوسيطة بينما في fprintf ، يتم تحويل الوسيطة إلى سلسلة. المنطق الأساسي وراء كلا يبقى كما هو.
يكون cstdio أسرع مع تمكين المزامنة ولكن يصبح iostream أسرع ، وفي بعض الحالات يكون أسرع بكثير إذا قمت بتعطيل المزامنة بين الاثنين. في رمز C ++ الجيد ، يجب استخدام iostream فقط ، وبالتالي يمكنك تعطيل المزامنة عن طريق استدعاء std :: ios :: sync_with_stdio (false).
ملحوظة
خلافًا للاعتقاد الشائع ، إذا كانت الوظيفة نفسها موجودة لكل من مكتبات C ++ ومكتبات C ، فإن تطبيق C ++ سيكون دائمًا أفضل دائمًا بسبب تحسين برنامج التحويل البرمجي.
الاجابه 2:
نعم ، الأمراض المنقولة جنسيا :: cout هو أفضل. إنه std :: ostream ، وكذلك std :: stringstream ، وهو مماثل لمتغير printf المسمى sprintf.
هناك العديد من المشاكل مع printf.
- يستخدم سلسلة تنسيق لتحديد ليس فقط كيفية طباعة الوسائط المتبقية ، ولكن أيضًا لتحديد أنواع هذه الأنواع ، والتي لا تتضمن نظام الكتابة ، لذلك لا يعرف المترجم أنواع الشيء الذي أنت الطباعة. لحل هذه المشكلة ، يحاول أحدث برامج التحويل البرمجي C و C ++ تفسير هذه السلسلة في وقت الترجمة ، وهو معاملة خاصة لهذه الوظيفة. لا يجب التعامل مع أي وظيفة بشكل خاص. إنها تستخدم الصيغ التي تمحو النوع ، لذا فإن المشكلة رقم 1 ضرورية للغاية ، عندما لا تكون كذلك.
يحتوي std :: ostream ، مثل std :: cout ، على عامل << المحدد لكل نوع تريد طباعته ، ويمكن لمعظمهم الاتصال بـ << عامل التشغيل لأنواعهم الأولية لإنجاز هذه المهمة. تعرف كل وظيفة من عوامل << النوع الذي تقوم بطباعته ، وهي تكتب بشكل آمن في وقت الترجمة ، وبالتالي فإن مشكلة وقت التشغيل المتمثلة في عدم تمرير وسيطات كافية للطباعة على أساس سلسلة التنسيق الخاصة بها لم تعد مشكلة لأن std :: ostream لم يعد ' ر بحاجة الى سلسلة الشكل.
تعتمد فروق السرعة تمامًا على التنفيذ ، لكن std :: cout لديها القدرة على أن تكون أسرع من printf خلال التضمين.
الاجابه 3:
نعم ، الأمراض المنقولة جنسيا :: cout هو أفضل. إنه std :: ostream ، وكذلك std :: stringstream ، وهو مماثل لمتغير printf المسمى sprintf.
هناك العديد من المشاكل مع printf.
- يستخدم سلسلة تنسيق لتحديد ليس فقط كيفية طباعة الوسائط المتبقية ، ولكن أيضًا لتحديد أنواع هذه الأنواع ، والتي لا تتضمن نظام الكتابة ، لذلك لا يعرف المترجم أنواع الشيء الذي أنت الطباعة. لحل هذه المشكلة ، يحاول أحدث برامج التحويل البرمجي C و C ++ تفسير هذه السلسلة في وقت الترجمة ، وهو معاملة خاصة لهذه الوظيفة. لا يجب التعامل مع أي وظيفة بشكل خاص. إنها تستخدم الصيغ التي تمحو النوع ، لذا فإن المشكلة رقم 1 ضرورية للغاية ، عندما لا تكون كذلك.
يحتوي std :: ostream ، مثل std :: cout ، على عامل << المحدد لكل نوع تريد طباعته ، ويمكن لمعظمهم الاتصال بـ << عامل التشغيل لأنواعهم الأولية لإنجاز هذه المهمة. تعرف كل وظيفة من عوامل << النوع الذي تقوم بطباعته ، وهي تكتب بشكل آمن في وقت الترجمة ، وبالتالي فإن مشكلة وقت التشغيل المتمثلة في عدم تمرير وسيطات كافية للطباعة على أساس سلسلة التنسيق الخاصة بها لم تعد مشكلة لأن std :: ostream لم يعد ' ر بحاجة الى سلسلة الشكل.
تعتمد فروق السرعة تمامًا على التنفيذ ، لكن std :: cout لديها القدرة على أن تكون أسرع من printf خلال التضمين.
الاجابه 4:
نعم ، الأمراض المنقولة جنسيا :: cout هو أفضل. إنه std :: ostream ، وكذلك std :: stringstream ، وهو مماثل لمتغير printf المسمى sprintf.
هناك العديد من المشاكل مع printf.
- يستخدم سلسلة تنسيق لتحديد ليس فقط كيفية طباعة الوسائط المتبقية ، ولكن أيضًا لتحديد أنواع هذه الأنواع ، والتي لا تتضمن نظام الكتابة ، لذلك لا يعرف المترجم أنواع الشيء الذي أنت الطباعة. لحل هذه المشكلة ، يحاول أحدث برامج التحويل البرمجي C و C ++ تفسير هذه السلسلة في وقت الترجمة ، وهو معاملة خاصة لهذه الوظيفة. لا يجب التعامل مع أي وظيفة بشكل خاص. إنها تستخدم الصيغ التي تمحو النوع ، لذا فإن المشكلة رقم 1 ضرورية للغاية ، عندما لا تكون كذلك.
يحتوي std :: ostream ، مثل std :: cout ، على عامل << المحدد لكل نوع تريد طباعته ، ويمكن لمعظمهم الاتصال بـ << عامل التشغيل لأنواعهم الأولية لإنجاز هذه المهمة. تعرف كل وظيفة من عوامل << النوع الذي تقوم بطباعته ، وهي تكتب بشكل آمن في وقت الترجمة ، وبالتالي فإن مشكلة وقت التشغيل المتمثلة في عدم تمرير وسيطات كافية للطباعة على أساس سلسلة التنسيق الخاصة بها لم تعد مشكلة لأن std :: ostream لم يعد ' ر بحاجة الى سلسلة الشكل.
تعتمد فروق السرعة تمامًا على التنفيذ ، لكن std :: cout لديها القدرة على أن تكون أسرع من printf خلال التضمين.
الاجابه 5:
نعم ، الأمراض المنقولة جنسيا :: cout هو أفضل. إنه std :: ostream ، وكذلك std :: stringstream ، وهو مماثل لمتغير printf المسمى sprintf.
هناك العديد من المشاكل مع printf.
- يستخدم سلسلة تنسيق لتحديد ليس فقط كيفية طباعة الوسائط المتبقية ، ولكن أيضًا لتحديد أنواع هذه الأنواع ، والتي لا تتضمن نظام الكتابة ، لذلك لا يعرف المترجم أنواع الشيء الذي أنت الطباعة. لحل هذه المشكلة ، يحاول أحدث برامج التحويل البرمجي C و C ++ تفسير هذه السلسلة في وقت الترجمة ، وهو معاملة خاصة لهذه الوظيفة. لا يجب التعامل مع أي وظيفة بشكل خاص. إنها تستخدم الصيغ التي تمحو النوع ، لذا فإن المشكلة رقم 1 ضرورية للغاية ، عندما لا تكون كذلك.
يحتوي std :: ostream ، مثل std :: cout ، على عامل << المحدد لكل نوع تريد طباعته ، ويمكن لمعظمهم الاتصال بـ << عامل التشغيل لأنواعهم الأولية لإنجاز هذه المهمة. تعرف كل وظيفة من عوامل << النوع الذي تقوم بطباعته ، وهي تكتب بشكل آمن في وقت الترجمة ، وبالتالي فإن مشكلة وقت التشغيل المتمثلة في عدم تمرير وسيطات كافية للطباعة على أساس سلسلة التنسيق الخاصة بها لم تعد مشكلة لأن std :: ostream لم يعد ' ر بحاجة الى سلسلة الشكل.
تعتمد فروق السرعة تمامًا على التنفيذ ، لكن std :: cout لديها القدرة على أن تكون أسرع من printf خلال التضمين.