【问题标题】:Is it bad to have the same name for parameter as for member variable? [duplicate]参数名称与成员变量名称相同是不是很糟糕? [复制]
【发布时间】:2013-08-05 05:56:13
【问题描述】:

例如,这是以下任何一种吗

  • 不好的做法
  • 不可读
  • 效率低下(对this指针的调用)
  • 这样做不好的任何其他原因

.

class Person {

    public:
        string name;
        Person(string name) {
            this->name = name;
        }

};

附言

Person(string name) : name(name) { }怎么样

【问题讨论】:

  • 是什么让您认为这会低效?
  • 我不知道,也许这个指针有 4 个字节的额外开销:/ 这就是我问的原因
  • 以上都不是。这是一个众所周知的成语。
  • @OleksiyDobrodum:this 始终存在,无论您是否明确声明。
  • 开销是默认构造一个字符串,然后分配给它。使用构造函数初始化列表,那就不用担心了。

标签: c++ syntax parameters this


【解决方案1】:

不,我不认为这是一个不好的方法。有时我们甚至会面对来自不同库的相同方法名或属性名。这就是我们创建命名空间和类来解决命名冲突的原因。

只要不会造成混乱,就应该尽量简单。即使他们使用相同的名称。但是,您不应该混合使用它们,例如:

class Person {
public:
    Person(name) {
        this->name = name;
        name = clean(this->name);
        this->name = prefix + name;
    }

private:
    string name;
};

保持清洁:

class Person {
public:
    Person(name) {
        name = clean(name);
        name = prefix + name;

        this->name = name;
    }

private:
    string name;
};

【讨论】:

    【解决方案2】:

    我能想到的唯一问题(不是真正的问题)是您无法将member variablelocal variablefunction parameter 区分开来。这只是编码风格,与效率无关,但是当您谈论 Unreadable 时,对我来说是的。

    对我来说,我通常使用尾随下划线命名类成员变量。它有助于代码的可读性并使其更易于维护。

    class Person {    
        public:
            string name_;                // member variable with traling `_`
            string m_surname;            // some microsoft style declares member start with `m_`
            Person(const string& name)   // pass parameter by reference. 
            : name_(name)                // you know you are constructing member name_ with name variable
            {
            }
    
    };
    

    【讨论】:

    • 我见过所有这些样式,我认为它们非常丑陋和不必要。在 API 文档中,当构造函数参数和公共成员变量具有相同名称时,它实际上有帮助,只要它们实际上表示相同的东西。
    • 我认为说你不能区分成员变量和函数参数是不公平的,你显然可以。一种用this->varname 引用,另一种用varname 引用。 (当然在根本没有函数参数的情况下,那就没有混淆了。)
    • 我喜欢当有人回答主观答案时,又有 2 人用更主观的答案批评主观答案。如果它是一种已知的编程风格,那么人们使用它是有原因的。我个人使用与成员变量相同的参数。它工作得很好。
    猜你喜欢
    • 2015-01-14
    • 2014-01-04
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多