0

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

我有一堂课:

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

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

4

2 回答 2

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;
};
于 2013-02-27T08:45:38.180 回答
0

您在类构造函数初始化列表中对其进行初始化:

A::A()
    : a("a")
{
}
于 2013-02-27T08:43:41.783 回答