C ++类参数默认常量初始化

时间:2013-02-27 08:42:13

标签: c++ class initialization

这可能是一个愚蠢的问题,因为我在网上找不到答案,我猜是因为答案是否定的。

我有一个班级:

class A{
    public:
        A();
    private:
        std::string a("a");
};

我想在不调用类构造函数的情况下将a参数设置为“a”。原因是我真正的类我有很多不同的构造函数和许多参数,它们总是具有相同的(常量)值。如果有一天我决定用“b”代替“a”,我不想修改所有的构造函数。而且,我希望只存在于我的课堂中。

2 个答案:

答案 0 :(得分:3)

在C ++ 11中,您可以选择在声明时初始化非静态成员变量:

class A{
 public:
  A();
private:
  std::string a = "a"; // curly braces allowed too: std::string a{"a"};
};

C ++ 11还添加了委托构造函数,因此您可以从其他构造函数中调用类的构造函数。这允许您仅在一个位置初始化a

#include <iostream>
#include <string>

struct Foo
{
  Foo() : a("Hello, Foo!") {}
  Foo(int) : Foo() {}
  Foo(int, int) : Foo() {}
  std::string a;
};

int main()
{
  Foo f1(42);
  Foo f2 (1,2);
  std::cout << f1.a << "\n";
  std::cout << f2.a << "\n";
}

否则,请使用其他答案中建议的构造函数初始化列表:

class A{
 public:
  A() : a("a") {}
 private:
  std::string a;
};

答案 1 :(得分:0)

您在类构造函数initializer list中初始化它:

A::A()
    : a("a")
{
}