【问题标题】:Proper ways to initialize member variables with identical names as the parameters初始化与参数名称相同的成员变量的正确方法
【发布时间】:2015-03-16 14:49:49
【问题描述】:

我有一个看起来像这样的课程

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

我的问题是关于成员变量和构造函数参数具有相同名称的初始化语法。 我现在知道这样做是合法的,但我的问题是: 如果我想要“干净”、易于掌握的代码,我想知道我是否可以像在 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++11 syntax conventions


    【解决方案1】:

    C++,你不得不说:

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

    或等效

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

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

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

    更简洁(注意没有分号!)你为什么不喜欢它?

    【讨论】:

    • 谢谢@TonyK。并不是我不喜欢它,只是当看到两个名称相同但没有明确引用的变量时,它可能会令人困惑(即使对我来说也是如此)。由于我学的是 Java,我了解到如果成员变量和局部变量具有相同的名称,则必须使用带有“this”关键字的显式引用。
    • "注意缺少分号" 这是否适用,即使它位于头文件中并且我正在 cc 文件中执行实现?
    • @MahNas92:函数定义的右大括号(就是这样)从不需要分号。分号只是一个空语句,在类定义中被忽略。例如:class C { ; ; ; } ; 请注意,类定义后的分号必需的!。
    猜你喜欢
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多