Почему C ++ допускает, чтобы локальная переменная в функции-члене класса имела то же имя, что и переменная-член? - PullRequest
1 голос
/ 29 апреля 2020

Почему в C ++ локальная переменная в функции-члене класса может иметь то же имя, что и переменная-член? Какая польза от этого?

Следующий код компилируется.

class test
{
public:
  int i = 4;
  void func(){
    int i = 5;

    cout << i << endl;
    cout << this->i << endl;
  }
};

int main(int argc, char const *argv[])
{
  test t;
  t.func(); 
}

Вывод

5
4

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

Я просто потратил час на отладку кода, в котором я случайно использовал следующее в функции члена класса

auto member_var_name = some_val;         // declared and defined a local variable with the same name as the class member variable

, когда намеревался просто сделать

member_var = some_val;

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

...