【发布时间】:2021-05-29 09:34:12
【问题描述】:
我正在尝试实现 std::vector 但遇到了问题。
根据 C++ 参考,std::vector::at 就像:
reference at (size_type n);
const_reference at (size_type n) const;
我的问题是:我为什么不用reference at (size_type n) const;?
感谢您的任何帮助或批评!
更新: 谢谢!我很清楚。
我的错是我不知道有和没有const 的函数也是一种过载。最初的设计是在 const 向量调用它时使用带有 const 的那个,所以它会返回一个 const_reference。当向量不是 const 时,返回值不应该是 const_reference。
但是如果我们将这两个函数都设为const,那么这两个函数除了返回类型之外没有区别,它不是合法的覆盖。所以前者不是设计为const,尽管它可以是const。
谢谢!
【问题讨论】:
-
你可以这样做,没问题。这违反了 C++ 标准,但可能会出乎其他人的意料。
-
v.at(42) = 1234
-
成员函数后面的
const应用于隐式this参数。所以成员函数void Foo::Reset();和void Foo::Dump() const;有点像(伪代码)void Foo::Reset(Foo* const this)和void Foo::Dump(Foo const* const this); -
@Eljay 谢谢!这对我有很大帮助,因为我在编写该更新时认为它是
Foo const *this;但实际上正如您所指出的那样,它是Foo const * const this。