Почему в 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 я знал, что конструкторы могут использовать имена членов класса в качестве имен параметров, но я не знал, что подобное допускается.