Когда это обязательно? [Дубликат]

У меня была эта проблема, когда я просматривал интернет через мою мобильную точку доступа. он также сжимал изображения и добавлял следующий сценарий внизу тега body

<script language="javascript"><!--
bmi_SafeAddOnload(bmi_load,"bmi_orig_img");//-->
</script>

Когда я подключался к собственному Wi-Fi-соединению, все, похоже, работает для меня. Надеюсь, что это поможет кому-то.

14
задан Ben 6 March 2012 в 21:52
поделиться

7 ответов

Это вопрос стиля. Некоторым людям нравится дополнительный this->, чтобы сделать более очевидным, что вы обращаетесь к члену класса. Но если вы почувствуете, что без него будет очевидно, что нет никакого различия в сгенерированном коде или производительности.

(Помимо случая, о котором вы говорили с перекрывающимися областями, this-> также может быть обязательным в шаблоне, когда пытаясь назвать элемент базового класса, зависящего от типа.)

6
ответ дан aschepler 4 September 2018 в 10:02
поделиться

Как правило, это вопрос местных соглашений. Большинство мест, которые я видел, не используют this->, кроме случаев, когда это необходимо, и это соглашение, которое я предпочитаю, но я слышал о тех, кто предпочитает использовать его систематически.

два случая, когда это необходимо. Во-первых, если вы скрыли имя с тем же именем в локальной области; если, например, у вас есть член с именем toto, и вы также назвали свой аргумент функции toto. Многие соглашения о кодировании отмечают либо член, либо суждения, чтобы избежать этого случая, например. все имена участников начинаются с my или m_, или имя параметра начинается с the.

В другом случае this-> можно использовать в шаблоне, чтобы сделать имя зависимым от имени , Это имеет значение, если класс шаблона наследуется от зависимого типа, и вы хотите получить доступ к члену базы, например:

template <typename T>
class Toto : public T
{
public:
    int f()
    {
        return this->g();
    }
};

Без this-> здесь g() -зависимое имя, и компилятор будет искать его в контексте определения шаблона, не принимая во внимание базовый класс.

24
ответ дан James Kanze 4 September 2018 в 10:02
поделиться

просто избыточно использовать this-> для вызова участников, если вы не хотите, чтобы семантически различать местные и члены быстро. многие люди используют префикс m_ для членов класса, чтобы не писать this-> все время.

5
ответ дан Not_a_Golfer 4 September 2018 в 10:02
поделиться

с помощью «this->» лучше (вы уверены, что это члены), но это не имеет значения

0
ответ дан Pben 4 September 2018 в 10:02
поделиться

Если функция шаблона делает вызов функции-члена таким образом, что вызов не зависит от каких-либо параметров шаблона, this-> может использоваться, чтобы помочь компилятору в качестве альтернативы MyUtopicClass<int, double, double>::vin().

0
ответ дан perreal 4 September 2018 в 10:02
поделиться

Я всегда использую this при вызове функций [].

  1. Он превращает имя функции в зависимое имя, так что функции-члены базового класса находятся внутри class.
  2. Он подавляет зависящий от аргументов поиск. У ADL есть свои преимущества, но это может привести к неожиданному поведению, и мне это нравится, если он не мешает мне.
  3. У него нет реальных недостатков, поэтому я использую его для всех вызовов функций-членов для согласованности причины.
  4. Я программирую на Python много, где явный self является обязательным, поэтому для меня это не является реальной нагрузкой.

Но для членов данных я использую это только тогда, когда это необходимо, потому что ADL не происходит. Чтобы ответить на ваши конкретные вопросы:

В рамках функции-члена класса в C ++ это имеет значение, если я использую this-> dataMember или просто dataMember?

Да, если это внутри шаблона класса. Тогда dataMember считается необязательным именем, что может привести к семантическим различиям. Например:

#include <iostream>

int i = 1;

struct R {
  int i;
  R(): i(2) { }
};

template<typename T>
struct S: T {
  void f() {
    std::cout << i << ' '     // selects ::i
              << this->i      // selects R::i
              << std::endl;
  }
};

int main() {
  S<R>().f();
}

Что считается лучшим стилем?

Я не думаю, что в сообществе есть сильное мнение об этом. Использовать любой стиль, но быть последовательным.

Есть ли разница в производительности?

Я уверен, что нет.

5
ответ дан Philipp 4 September 2018 в 10:02
поделиться

используйте это, когда у вас есть скрытый / закрытый член =), в любом другом случае это не делает разницы =)

из информационного центра IBM. Я цитирую следующие

Unless a class member name is hidden, using the class member name is equivalent to using 
the class member name with the this pointer and the class member access operator (->).
1
ответ дан Sebastian Flückiger 4 September 2018 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: