2013-02-27 37 views
0

这可能是一个愚蠢的问题,因为我没有在网上找到答案,我想这是因为答案是否定的。C++类参数默认常量初始化

我有一个类:

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

我想设置一个参数为“A”,而无需调用类的构造函数。原因是我真正的类我有很多不同的构造函数和大量的参数总是有相同的(常量)值。如果有一天我决定用“b”代替“a”,我不想修改所有的构造函数。而且,我希望只有在我的班级中才存在这种情况。

回答

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; 
}; 
+0

谢谢,好了,我需要使用=符号而不是()... – PinkFloyd 2013-02-27 08:49:55

+0

正如我所说我不想使用初始化列表... – PinkFloyd 2013-02-27 08:50:22

+0

@ user2110463或'{}'语法。 '()'是不允许的,因为它可以被解析为一个函数。 C++ 11还为您提供委托构造函数,这些构造函数只允许您在一个地方设置“a”。我会添加一个例子。 – juanchopanza 2013-02-27 09:02:16