如果C 中的支架重载运算符被声明为const函数
Should the bracket overloaded operator in C++ be declared as a const function?
我想在C 中为我的自定义数组类实现一个括号[]运算符。我有几个选择:
(1(Point& operator[](int index)
(2(Point& operator[](int index) const
(3(const Point& operator[](int index) const
(3(我知道,如果用户声明const对象,则需要。但是,对于一般情况(1,2(,我应该制作函数const,因为该对象在功能主体中从未修改?
(1(是正确返回参考的正确的。
(2(需要是非const
,因为您希望能够通过返回的参考来修改类成员。
(3(需要const
,因此可以在const this
或同等参考中调用[]
。
编写Point& operator[](int index) const
将导致意外行为,因为您可以通过参考修改类成员。您的Point& operator[](int index)
功能代码可能不会修改对象,但是它允许其他代码修改对象,因为它返回了非const引用数据成员。因此,Point& operator[](int index) const
不是您可以提供的,并且编译器不应接受提供非const访问类数据成员的const函数。
您应该与const Overload一起提供非const版本:
Point& operator[](int index);
const Point& operator[](int index) const;
相关文章:
- 为什么函数声明中允许 const?
- 在内存不足之前,我可以声明多少个 const 变量?
- 如何在声明为 const 的方法中更改类成员
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 可以使用<size_t>static_const(),std::as_const()或static_cast<const size_t>()来声明数组吗?
- 为什么必须将 const 添加到 constexpr 中才能进行字符串文字声明?
- 声明与 const 变量和成员函数相同的标识符
- 为什么我不能声明一个 constexpr 本地,而一个 const 一个工作?
- 类中的const声明
- 在类声明中初始化 const 成员变量时在调试模式下出现异常
- 为什么我们在这个函数声明中使用 const 和 & ?
- 为什么重载运算符>在参数声明 const 时不起作用?
- 在C 中声明const Pointer是常见的
- 声明“const”“boost::range”的正确方法
- 在声明'const'函数中循环访问具有'const_iterator'的集合会导致错误
- 什么是最好的以及如何在 C++ 函数中声明 const
- 我可以从引用传递的参数返回值中声明const int吗
- 在函数中声明const而不是变量有什么好处吗?
- 是否在类外部重新声明const静态变量
- 声明const全局变量时需要静态的