C++在头文件或构造函数中初始化const类成员变量?
问题描述:
我只想问一下在C++,头文件或构造函数中初始化const类成员变量的最佳做法是什么?C++在头文件或构造函数中初始化const类成员变量?
感谢:)
在头文件:
h文件:
class ExampleClass{
public:
ExampleClass();
private:
const std::string& string_member_variable_ = "Sample Text";
}
或
在构造:
.h文件中:
class ExampleClass{
public:
ExampleClass();
private:
const std::string& string_member_variable_;
}
.cpp文件:
ExampleClass::ExampleClass() : string_member_variable_("Sample Text") {}
答
它们两者并不完全相同,使用构造函数初始化的一个缺点是您需要维护初始化的顺序 另外如果使用.cpp和.h,则可能需要始终切换到cpp以查找初始化值。
这这个问题是已经回答C++11 member initializer list vs in-class initializer?
答
你可以,如果使用C++ 11就地初始化。你也可以在构造函数中初始化。两种方法来初始化类里面const成员字段:
class MyClass{
public:
const std::string myconst = "Hello World"; // in-place initialization C++11
};
class MyClass{
public:
const std::string myconst;
MyClass() : myconst("Hello World"){} // initialize const member in a constructor
};
当涉及到非静态整型常量,我会选择一个构造函数的选择。在头文件中声明一个常量,并在源文件的构造函数中初始化它。 另一件事是,这一部分:
const std::string& string_member_variable_ = "Sample Text";
是错误的,你的编译器会警告你:
参考成员被初始化到一个临时的构造后不会保留 退出
改为使用const std::string
。
答
参数为“在构造函数”:旧的代码库的
- 代码风格的一致性。
- 需要在不同编译器的不同平台上构建代码。
- 发展中可能会降低编译速度。如果你改变你常量的值,那么包含你的头文件的所有单位都将被重建。
嘿罗恩,感谢您的快速回复。我知道这两个都是可能的,这就是为什么我问什么是更好的做法? :) – Tal