سؤال

والسؤال هو بسيط ... هل هناك أي فرق في استخدام هذا-> yourvariable أو yourvariable مباشرة لسبب ما؟

وأنا لا يجد أي مشكلة في ذلك، ولكن أنا أستخدم هذا-> كثيرا، وأود أن أعرف إذا كان هناك أي فرق قبل المضي قدما.

ورأيت تعليق على وظيفة هنا وأنا لا أتذكر أي موضوع، لكنه قال ان الشخص شيئا حول استخدام الكلمة "هذا".

وشخصيا، أجد أنه من الجميل أن استخدام أكثر من متغير مباشرة. يجعل رمز أكثر سهولة وجميلة.

وجو

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

المحلول

لا، ليس هناك فرق حقيقي، فإنه ببساطة تصفيات النطاق. ومع ذلك، لنفترض طريقة

void SetFoo( Foo foo )
{
    this->foo = foo;
}

وحيث هذا-> فو هو عضو خاص. هنا أنه يسمح لك أن تأخذ معلمة بنفس الاسم كفئة / المثال متغير.

نصائح أخرى

في معظم الحالات ليس هناك فرق. ولكن هناك حالات حيث أنه يحدث فرقا:

class foo
{
    int i;
    void bar() {
        int i = 3;
        i; // refers to local i
        this->i; // refers to the member i
    }
};

وأيضا، مع القوالب التي قد تحتاج إلى تأهيل عضو مع this-> بحيث يتم تأخير هذا الاسم البحث:

template<typename T>
struct A
{
    int i;
    T* p;
};

template<typename T>
struct B : A<T>
{
    void foo() {
        int k = this->i; // here this-> is required
    }
};

ومترجم أن يفعل "اثنين من مرحلة البحث" بشكل صحيح سوف يشكون في حالة إزالة "هذا->" أنه لا يعرف ما هو المفترض أن يكون. "هذا->" يخبره أنه عضو من الفئة الأساسية. منذ الفئة الأساسية تعتمد على معلمة قالب، يتم تأخير البحث حتى يتم إنشاء مثيل قالب فئة.

وأجد أن استخدام this يجعل قانون بلدي أكثر قابلية للقراءة، ولكن ليس هناك سبب أن لديك. إذا نظرتم الى رمز المجمع المترجم الخاص بك يولد، ينبغي أن يكون وظيفيا (وعادة حرفيا) متطابقة.

وأساسا، عندما يتم استدعاء الدالة، يتم تمرير وthis حجة الخفية الذي يستخدم بعد ذلك لمعرفة المتغيرات التي هي فيها. إذا كنت تستخدم المتغيرات مباشرة، دون this->، كنت لا تفعل أي شيء ما عدا الاستفادة من بعض نحوي السكر.

scroll top