"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > التمرير حسب القيمة أو المرجع: متى يكون \"هل تريد السرعة؟ التمرير حسب القيمة\" صحيحًا بالفعل؟

التمرير حسب القيمة أو المرجع: متى يكون \"هل تريد السرعة؟ التمرير حسب القيمة\" صحيحًا بالفعل؟

تم النشر بتاريخ 2024-11-08
تصفح:575

  Passing by Value or Reference: When is \

"هل تريد السرعة؟ تجاوز القيمة" - استكشاف الآثار المترتبة على الأداء

بيان سكوت مايرز "هل تريد السرعة؟ تجاوز القيمة" يثير أسئلة حول فوائد الأداء لتمرير الكائنات حسب القيمة مقابل المرجع. في هذا السياق، يتضمن التمرير حسب القيمة عملية نسخ، بينما يؤدي المرور حسب المرجع إلى تجنب النسخ غير الضرورية. std::string mem_name; X(std::string name) : mem_name(std::move(name)) {} }; الهيكل ص { std::string mem_name; Y(const std::string &name) : mem_name(name) {} };

في مُنشئ X، يتم نسخ اسم الوسيطة إلى كائن مؤقت قبل استدعاء مُنشئ النقل على std::string لتهيئة mem_name. في مُنشئ Y، يكون اسم الوسيطة مرجعًا ثابتًا، ولكن لا يزال يتم عمل نسخة لتهيئة mem_name. لذلك، يقوم X بإجراء عملية "نسخ ثم نقل"، بينما يقوم Y بإجراء نسخة واحدة.

struct X {
  std::string mem_name;
  X(std::string name) : mem_name(std::move(name)) {}
};
struct Y {
  std::string mem_name;
  Y(const std::string &name) : mem_name(name) {}
};

قيم L

: سيقوم كل من X وY بإجراء نسخة (في X عند تهيئة الاسم، في Y عند تهيئة mem_name)، متبوعة بعملية نقل في X.

    قيم R
  • : قد يقوم X بإجراء حركة فقط إذا كان من الممكن تطبيق RVO، بينما لا يزال Y يتطلب نسخة.
  • بشكل عام، تكون الحركة أسرع من تمرير المؤشر، وهو ما يفعله التمرير بالإشارة بشكل أساسي. لذلك، بالنسبة لقيم r، يكون أداء X أفضل من Y، بينما بالنسبة للقيم l، يكون الأداء مشابهًا.
  • من المهم ملاحظة أن هذه ليست قاعدة عالمية وقد تختلف التحسينات اعتمادًا على المترجم والنظام الأساسي. يوصى بالتوصيف لتحديد النهج الأمثل في حالات محددة.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3