لا أعرف ما إذا كان هذا هو السلوك المقصود أم لا (إذا كان الأمر كذلك ، آسف ، فقط أغلق هذه المشكلة) ، ولكن من الواضح أنه لا ينبغي السماح بذلك!
دعنا نقول،
1) أريد أن يكون للمتغير foo
قيمة 1 افتراضيًا ،
2) وتغير قيمتها عندما يتفاعل المستخدم بطريقة ما (دعنا نقول المدخلات).
3) بعد انتهاء عمل المستخدم ، يجب أن تكون قيمة foo
هي 1 مرة أخرى.
ما يحدث هنا هو أنه يتم استدعاء الوظائف المرتبطة بـ setget
كل مرة يتم فيها تعيين القيمة على 1 عندما تكون بالفعل 1 ، يجب استدعائها مرة واحدة (المرة الأولى) عندما تكون القيمة الأصلية مختلفة. هذا يقتل الأداء إلى حد ما بالنسبة لي ، أعلم أنه يمكنني القيام بذلك:
if (new_value == old_value):
return
لكن هذا يجب أن يتم بشكل تلقائي.
لا أعتقد أنه من الجيد القيام بذلك تلقائيًا. لا يجب أن يؤثر تعيين متغير بنفس القيمة الموجودة بالفعل على الأداء ، فهذا شيء يجب أن تتعامل معه الدالة setget
إذا لزم الأمر. إضافةً إلى ذلك ، فإن إضافة فحص القيمة _سوف_ يؤثر على الأداء نظرًا لأنه فرع جديد (غير ضروري من الناحية المفاهيمية).
لا أعتقد أيضًا أنه يمكننا افتراض أن الإعداد بنفس القيمة لن يكون له أي تأثير على المحدد ، وبالتالي يمكن تجاوزه.
يبدو أن لديك أداة ضبط معقدة للغاية إذا كان من الممكن أن يؤدي تعيين قيمة واحدة في كل مرة إلى تحقيق هذا الأداء.
حسنًا ، عادةً ، عندما تقوم فقط بالتخصيص الذاتي لن يكون ذلك مشكلة ، ولكن إذا قمت بعمل أكثر من تعيين قيمة جديدة ، مثل ما يتعلق بـ "setget" ، فسيؤذي الأداء. خاصة إذا بقيت القيمة دون تغيير وتم تخصيص كل إطار ذاتيًا.
إلى جانب ذلك ، فإن جميع مجمعي C ++ (الذين أعرفهم) يحميك من مثل هذه الفظائع. (على الأقل بالنسبة للأنواع الأساسية ، زيادة التحميل على عامل التعيين ، فأنت تلغي هذه الحماية) في الواقع ، لقد رأيت بعض التعليمات البرمجية تؤكد التحقق من ذلك لمعرفة ما إذا كانت القيمة تظل كما هي بعد التخصيص الذاتي للأرقام العائمة على amd cpus. تم القيام بذلك كتحقق من سلامة مشروع ما نسيت ما كان يسمى.
لا يستحق كسر الكود القديم في رأيي عندما يكون هناك حل بسيط (لدي رمز يستخدم أداة الإعداد لعرض إشعار للمستخدم لمحاولات تخصيص القيمة نفسها).
التعليق الأكثر فائدة
لا يستحق كسر الكود القديم في رأيي عندما يكون هناك حل بسيط (لدي رمز يستخدم أداة الإعداد لعرض إشعار للمستخدم لمحاولات تخصيص القيمة نفسها).