这可能是一个愚蠢的问题,因为我在网上找不到答案,我猜是因为答案是否定的。
我有一个班级:
class A{
public:
A();
private:
std::string a("a");
};
我想在不调用类构造函数的情况下将a参数设置为“a”。原因是我真正的类我有很多不同的构造函数和许多参数,它们总是具有相同的(常量)值。如果有一天我决定用“b”代替“a”,我不想修改所有的构造函数。而且,我希望只存在于我的课堂中。
答案 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")
{
}