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