【问题标题】:C++ Initialize const class member variable in header file or in constructor?C ++在头文件或构造函数中初始化const类成员变量?
【发布时间】:2020-04-15 09:55:05
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    • 旧代码库的代码风格一致性。
    • 需要在使用不同编译器的不同平台上构建代码。
    • 可能会减少开发时的编译时间。如果您更改常量的值,则包含您的标题的所有单元都将重新构建。

    【讨论】:

      【解决方案2】:

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

      这个问题已经回答了C++11 member initializer list vs in-class initializer?

      【讨论】:

        【解决方案3】:

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

        错了,你的编译器会警告你:

        reference 成员被初始化为一个不持久的临时成员 构造函数退出后

        请改用const std::string

        【讨论】:

        • 嗨罗恩,感谢您的快速回复。我知道两者都是可能的,这就是为什么我问更好的做法是什么? :)
        猜你喜欢
        • 2021-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多