gpt4 book ai didi

c++ - 在 C++ 中使用 const 成员变量有优势吗

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:46:06 25 4
gpt4 key购买 nike

我写的代码是这样的

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;
};

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

我有点焦虑,为什么我认为我上面的代码可能由于某种原因被认为是非法或错误的代码。
你觉得常量成员变量有没有好处?
请告诉我你的理由。

最佳答案

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

另一方面,更重要的是,它们使用默认功能防止复制分配和移动。

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


对于客户端代码,而不是类自己的代码,逻辑const-ness,不变性,可以用non-public non-const 具有const 访问器成员函数的数据成员。


<支持>¹ 不幸的是,Visual C++ 2015 至少接受一些没有用户定义的默认构造函数的未初始化 const 成员的情况,因此在撰写本文时,不能 100% 确定编译器会捕获丢失的初始化。

关于c++ - 在 C++ 中使用 const 成员变量有优势吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38155699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com