2017-07-17 117 views
1

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

回答

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

+0

嘿罗恩,感谢您的快速回复。我知道这两个都是可能的,这就是为什么我问什么是更好的做法? :) – Tal

0

参数为“在构造函数”:旧的代码库的

  • 代码风格的一致性。
  • 需要在不同编译器的不同平台上构建代码。
  • 发展中可能会降低编译速度。如果你改变你常量的值,那么包含你的头文件的所有单位都将被重建。
相关问题