程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么 std::vector::at 不是 const 函数?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决为什么 std::vector::at 不是 const 函数??

开发过程中遇到为什么 std::vector::at 不是 const 函数?的问题如何解决?下面主要结合日常开发的经验,给出你关于为什么 std::vector::at 不是 const 函数?的解决方法建议,希望对你解决为什么 std::vector::at 不是 const 函数?有所启发或帮助;

我正在尝试实现 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

谢谢!

解决方法

ref at (size_type n) const; 可能导致的问题。首先,您需要了解const_reference at (size_type n) const; 存在的原因。在 const std::vector 中,一旦初始化,它或其元素不应更改(因为它毕竟是 const)。普通的 reference at (size_type n);用于 const 向量,因为它返回对元素的非 const 引用,这意味着它可以更改。这与 const 对象的想法背道而驰,这就是为什么此特定重载不适用于 const 向量的原因。

这就是 const_reference at (size_type n) const; 的用武之地。如您所知,结尾 const 是对编译器和程序员的承诺,即这不会改变其对象或为其对象提供机会被更改,因此它可以与 const 对象一起使用。在 const_reference at (size_type n) const; 的情况下,确实如此:它返回一个 const 引用,这意味着您获得的元素无法更改。这保证您的 const 向量确实是 const 并且不会被更改。

这就是 reference at (size_type n) const; 有问题的原因。你对编译器和程序员都说谎,说这在 const 对象上使用是安全的,实际上它确实不是,因为它返回一个可变引用,你可以轻松地更改元素您可以使用 at

问问自己:如果这个程序有效,你会不会感到震惊?

#include <vector>

int main()
{
    const std::vector<int> a = {1,2,3};
    a.at(0) = 10;
}

大佬总结

以上是大佬教程为你收集整理的为什么 std::vector::at 不是 const 函数?全部内容,希望文章能够帮你解决为什么 std::vector::at 不是 const 函数?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。