C++;在头文件或构造函数中初始化常量类成员变量? 我只想问一下,C++中,头文件或构造函数中初始化const类成员变量的最佳实践是什么?

C++;在头文件或构造函数中初始化常量类成员变量? 我只想问一下,C++中,头文件或构造函数中初始化const类成员变量的最佳实践是什么?,c++,constructor,header,initialization,member-variables,C++,Constructor,Header,Initialization,Member Variables,谢谢:) 在头文件中: .h文件: 或 在构造函数中: .h文件: .cpp文件: 如果使用C++11,则可以就地初始化。也可以在构造函数中初始化。初始化类内常量成员字段的两种方法: class MyClass{ public: const std::string myconst = "Hello World"; // in-place initialization C++11 }; class MyClass{ public: const std::string mycon

谢谢:)

在头文件中: .h文件:

在构造函数中: .h文件:

.cpp文件:


如果使用C++11,则可以就地初始化。也可以在构造函数中初始化。初始化类内常量成员字段的两种方法:

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

它们并不完全相同,对于构造函数初始化,一个缺点是需要保持初始化顺序 此外,如果使用.cpp和.h,则可能需要始终切换到cpp以查找初始化值

这个问题已经在“构造函数中”的参数中得到了回答:

  • 旧代码库的代码样式一致性
  • 需要使用不同的编译器在不同的平台上构建代码
  • 开发时可能减少编译时间。如果更改常量的值,将重新生成包含标头的所有单位

嘿,罗恩,谢谢你的快速回复。我知道两者都有可能这就是为什么我问什么是更好的做法
ExampleClass::ExampleClass() : string_member_variable_("Sample Text") {}
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";