C ++在头文件或构造函数中初始化const类成员变量?

时间:2017-07-17 01:20:15

标签: c++ constructor header initialization member-variables

我只是想问一下在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") {}

3 个答案:

答案 0 :(得分:1)

如果使用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

答案 1 :(得分:0)

它们都不是一样的,构造函数初始化的一个缺点是你需要保持初始化的顺序 此外,如果使用.cpp和.h,则可能需要始终切换到cpp以查找初始值。

此问题C++11 member initializer list vs in-class initializer?

已经回答了这个问题

答案 2 :(得分:0)

“在构造函数中”的参数:

  • 旧代码库的代码样式一致性。
  • 需要使用不同的编译器在不同平台上构建代码。
  • 开发时可能降低编译速度。如果更改常量的值,则将重建包含标题的所有单位。