在C++中使用const成员变量有什么优点

Yus*_*ori 6 c++ header-files

我写代码像

template <typename XAxis, typename YAxis>
class Interpolation {
public:
    using x_value_type = typename XAxis::value_type;
    using y_value_type = typename YAxis::value_type;

    Interpolation(const XAxis& x_axis, const YAxis& y_axis)
        : _x_axis(x_axis), _y_axis(_y_axis)
    {}

public:
    y_value_type interpolate(const x_value_type& x) const;

private:
    const XAxis _x_axis;
    const XAxis _y_axis;
};
Run Code Online (Sandbox Code Playgroud)

当我想要成员变量是不可变的时。

我感到有点焦虑,为什么我认为我可能因某种原因知道上面的代码是非法的或坏的代码。
您认为常量成员变量有什么好处或没有什么好处?
请告诉我你的理由。

Che*_*Alf 4

成员的一个实际优点const是,除非它们属于具有用户定义的默认构造函数的类,否则必须显式初始化它们。因此,符合 \xc2\xb9 标准的编译器将捕获任何丢失的初始化。成员表达预期功能也是一个优点const,即在对象的生命周期内不发生任何更改,因此有助于编译器检测任何可能(错误地)更改值的代码。

\n\n

另一方面,更重要的是,使用默认功能,它们会阻止副本分配和移动。

\n\n

这些注意事项也适用于引用数据成员,可以将其视为(概念上)自动取消引用的const指针成员。

\n\n
\n\n

对于客户端代码,而不是类自己的代码,逻辑性const、不变性可以通过使用带有访问器成员函数的非非public数据const成员来表达const

\n\n
\n\n

\n\xc2\xb9 不幸的是,Visual C++ 2015 至少接受某些const没有用户定义的默认构造函数的未初始化成员,因此在撰写本文时,无法 100% 确定编译器会捕获丢失的初始化.\n

\n