初始化与参数同名的成员变量的正确方法

Proper ways to initialize member variables with identical names as the parameters

我有一个 class 看起来像这样

class Rational{
    public:
        Rational(int p = 0, int q = 1) : p(p), q(q){};
    private:
        int p;
        int q;
};

我的问题是关于成员变量和构造函数参数具有相同名称的初始化语法。 我现在知道这样做是合法的,但我的问题是: 如果我想要 "clean",易于掌握的代码,我想知道我是否可以像通常在 java:

中那样做
//Legal Java Code
this.q = q;
this.p = p;
//Is any of these legal C++ code (if so, which one)?
this.q(q);
this.p(p);
//or
this->q(q);
this->p(p);

尽管我没有测试过,但我可以测试,但我仍然想知道这样做的 C++ 约定。

C++中,你必须说:

this -> q = q;
this -> p = p;

或等效

(*this).q = q;
(*this).p = p;

但我认为成员初始化列表语法

Rational(int p = 0, int q = 1) : p(p), q(q){}

更干净(注意缺少分号!)您为什么不喜欢它?