【问题标题】:Create a default constructor when using const strings使用 const 字符串时创建默认构造函数
【发布时间】:2015-03-31 18:24:51
【问题描述】:

我有一个如下所示的课程:

Person(int pID,
    int zipCode,
    float ySalary,
    const string& fName,
    const string& mName,
    const string& lName)

当我尝试创建如下所示的默认构造函数时:

Person::Person(void){
    zipCode = NULL;
    pID = NULL;
    ySalary = NULL;
    fName = "";
    mName = "";
    lName = "";
}

我收到一条错误消息,提示没有与 const std::string = const char[1]; 匹配的运算符“=”

【问题讨论】:

  • 我假设您希望以后能够修改名称?您不应该使用 const 引用,而应该使用普通变量。
  • @MorphingDragon 他们没有说成员变量是const,他们只是通过const 引用将字符串传递给构造函数,无论如何这可能是个好主意。
  • “我有一个看起来像这样的类”并且错误消息说左操作数是 const。

标签: c++ default-constructor


【解决方案1】:

需要使用成员初始化器列表来初始化const引用成员变量:

Person::Person(void) :
    zipCode(NULL) ,
    pID(NULL) ,
    ySalary(NULL) ,
    fName("") ,
    mName("") ,
    lName("") { 
}

我建议始终使用成员初始化器列表语法,而不是构造函数主体中的赋值。例如,请参见此处:What is the advantage of using initializers for a constructor in C++?

【讨论】:

  • 您还应该注意,不需要默认构造函数,如果他希望编译器生成一个,他应该有Person() = default。
  • @0x499602D2 是的,但那将是 c++11 明确的。值得怀疑的是,如果我们应该考虑 c++ 指的是 当前 标准。
【解决方案2】:

除了上一个答案,您还可以使用类内初始化(c++11 起)。

示例:const string &fname = "";

【讨论】:

  • 这将是一个悬空引用
猜你喜欢
  • 1970-01-01
  • 2018-10-02
  • 2016-02-13
  • 2021-06-16
  • 2012-11-03
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多