Это факт, что вы можете явно обращаться к переменным-членам (внутри функции-члена, а не к определенному конструктору), используя этот синтаксис: this->member_name
(т. Е. Чтобы отличить аргумент функции от то же имя).Использование оператора области доступа для доступа к переменным нестатического элемента
Кроме того, я думал, что синтаксис ClassName::static_member
зарезервирован для доступа к статическим членам вне класса.
Тогда я был удивлен, когда я понял, что следующий set_2()
метод работает, как можно было ожидать:
#include <iostream>
struct A {
int x;
// The two following methods seem to act similarly:
void set_1(int x) { this->x = x; }
void set_2(int x) { A::x = x; }
};
int main()
{
A a;
a.set_1(13);
std::cout << a.x << std::endl;
a.set_2(17);
std::cout << a.x << std::endl;
return 0;
}
Является ли это хорошо и действует практика использовать оператор области видимости (A::x
) в этом случае? Я бы предпочел это, вместо использования синтаксиса this->x
.
IMHO, не используйте имена, вызывающие подобные конфликты, и вам не нужно использовать какой-либо синтаксис. –
@JoachimPileborg: многие люди дают этот совет, но я считаю более ясным, чтобы моя часть давала одно и то же имя, особенно с прямым назначением (только одно имя для одной задачи). – yolenoyer
Я бы украсил одно из имен. Мне очень нравится trailing _ в качестве элемента-декоратора. В качестве альтернативы вы можете использовать префикс «m_» для члена и/или «a_» для аргумента. Важно выбрать один стиль и придерживаться его. –