Есть ли любая причина использовать это->

Когда вы присваиваете переменную без ее удаления, она имеет глобальную область видимости.

x = 5;

Создает глобальную переменную.

let x = 5;

Создает переменную, которая имеет область видимости только для текущего блока.

Измените оба ваших массива на

let tips = [];

let finalBills = [];

И они будут разными.

16
задан The_Learner 29 November 2018 в 06:42
поделиться

15 ответов

Для гарантии Вы инициировали ошибки компилятора, если существует макрос, который мог бы быть определен с тем же именем как Ваша функция членства, и Вы не уверены, было ли это надежно не определено.

Никакое ребячество, я вполне уверен, я должен был сделать точно это по этой причине!

8
ответ дан 30 November 2019 в 15:02
поделиться

Я не могу вполне помнить точные обстоятельства, но я видел (очень редкие) экземпляры, где я должен был записать "это-> membername" для успешной компиляции кода с GCC. Все, что я помню, - то, что это не было относительно неоднозначности и поэтому взяло меня некоторое время для выяснения решения. Тот же код скомпилированный штраф, не используя это-> в Visual Studio.

1
ответ дан 30 November 2019 в 15:02
поделиться

Я предпочитаю его без явного этот указатель также. Для вызовов метода это не добавляет много значения, но это помогает отличить локальные переменные от членских переменных.

1
ответ дан 30 November 2019 в 15:02
поделиться

Это - Ваш собственный выбор. Я нахожу это более ясным, когда Вы используете это. Но если Вам не нравится он, Вы можете ommit это.

1
ответ дан 30 November 2019 в 15:02
поделиться

Разрешение неоднозначности: в случае, если у Вас есть другая подобная функция/переменная именования в том же пространстве имен? Я никогда не видел использование ни по какой другой причине.

1
ответ дан 30 November 2019 в 15:02
поделиться

Я не думаю, что это имеет значение к компилятору, но я всегда пишу это->, потому что я полагаю, что это делает самодокументирование кода.

1
ответ дан 30 November 2019 в 15:02
поделиться

Это - действительно вопрос стиля и относится ко многим другим языкам, таким как Java и C#. Некоторые люди предпочитают видеть явное this (или self, или Me, или безотносительно), и другие не делают. Просто пойдите с тем, что находится в Ваших инструкциях по стилю, и если это - Ваш проект, Вы добираетесь для решения инструкций.

2
ответ дан 30 November 2019 в 15:02
поделиться

Это сделано, чтобы быть явным о том, что используемая переменная является членской переменной в противоположность локальной или глобальной переменной. Это не необходимо в большинстве случаев, но быть явным об объеме могло быть полезным, если Вы превзошли переменную с объявлением того же имени в более трудном объеме.

В компаниях я работал в, мы просто предварительно ожидали "m _" к членским переменным. Это может иногда быть полезно, и я очень предпочитаю его использованию "этого->".

Редактирование: Добавление ссылки к документы GCC , которые объясняют случай, где использование этого-> необходимо, чтобы заставить независимый поиск работать правильно.

2
ответ дан 30 November 2019 в 15:02
поделиться

Это спросили пару раз, но трудно искать его, потому что "это", кажется, стоп-слово для поиска.

Вот мой собственный вопрос: там любые причины не использовать " this" (" Self" " Me"...)?

2
ответ дан 30 November 2019 в 15:02
поделиться

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

2
ответ дан 30 November 2019 в 15:02
поделиться

Я могу думать об удобочитаемости как то, когда Вы используете дополнительную круглую скобку, чтобы ясно дать понять вещи.

2
ответ дан 30 November 2019 в 15:02
поделиться

Как "причина кода", для различения локального параметра или значения (который имеет приоритет) от участника:

class Foo
{
    int member;
    void SetMember(int member)
    {
       this->member = member;
    }
}

Однако это - плохой practive для начала и обычно может решаться локально.

второй причиной является больше "среды": это иногда помогает Intellisense отфильтровать то, что я действительно ищу. Однако я также вещь, когда я использую это для нахождения участника, которого я ищу, я должен также удалить это.

Так да, существуют серьезные основания, но они - весь временный файл (и плохо на длительном периоде).

5
ответ дан 30 November 2019 в 15:02
поделиться

Если будет другая переменная в том же объеме с тем же именем, то это-> удалит неоднозначность.

void Bar::setFoo(int foo)
{
    this->foo = foo;
}

Также это проясняет, что Вы обращаетесь к членской переменной / функция.

28
ответ дан 30 November 2019 в 15:02
поделиться

Единственное место, где это действительно имеет значение, находится в шаблонах в производных классах:

template<typename T>
class A {
protected:
  T x;
};

template<typename T>
class B : A<T> {
public:
  T get() {
    return this->x;
  }
};

из-за детали в поиске имени в компиляторах C++ , должно быть сделано явно ясным, что x (наследованный) член класса, наиболее легко сделанного с this->x. Но это - довольно тайный случай, если у Вас нет шаблонных иерархий классов, Вы не должны действительно явно использовать this для доступа к членам класса.

39
ответ дан 30 November 2019 в 15:02
поделиться

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

struct F {
  void operator[](int); 
  void operator()();

  void f() {
    (*this)[n];
    (*this)();
  }

  void g() {
    operator[](n);
    operator()();
  }
};

Мне больше нравится синтаксис * this . Он имеет немного другую семантику, поскольку использование * this не скроет, однако, не являющиеся членами операторные функции с тем же именем, что и член.

0
ответ дан 30 November 2019 в 15:02
поделиться
Другие вопросы по тегам:

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