gpt4 book ai didi

C++ STL 常量迭代器和常量指针

转载 作者:行者123 更新时间:2023-11-30 04:30:33 24 4
gpt4 key购买 nike

我对这个 const 关键字的含义有点困惑我有这样的类(class)

class ClassA {
public:
typedef std::tr1::shared_ptr<ClassA> ptr;
typedef std::tr1::shared_ptr<const ClassA> const_ptr;
void oper() const;
void oper();
private:
.....
};

int main()
{
std::list<ClassA::const_ptr> const_list;
.....
for(std::list<ClassA::const_ptr>::iterator it = const_list.begin();\
it != const_list.end(); it++)
{
(*it)->oper();
}
return 0;
}

我已经从上面的代码中得到了 oper() 的 const 版本。所以我无法想象如果我将 std::list::iterator 更改为 std::list::const_iterator 会得到什么。

最佳答案

你的情况有点困惑,因为有两个间接级别(迭代器和智能指针),const以某种方式适用于它们中的任何一个(以及引用的对象)。

可以申请const :

  • 对象本身;这意味着它不能被修改;
  • 到智能指针;这意味着不能修改智能指针,例如无法通过 reset 重新安装;
  • 在某种意义上是迭代器,使用 const_iterator ;这意味着它将产生 const引用它所引用的对象(=> 智能指针)并且它不能用于修改它所引用的序列。

扩展一点:

记住 const shared_ptr<const ClassA>& (这是通过取消引用 const_iterator 得到的)与 shared_ptr<const ClassA>& 不同(你从一个正常的 iterator 得到):虽然在这两个你不能修改指向的对象(由于 shared_ptr 指的是一个 const ClassA ),在 const一个你不能修改 shared_ptr本身,例如意味着你不能reset它指向另一个对象,你不能分配另一个 shared_ptr对它,...

还请记住 const迭代器的版本,除了产生一个 const引用它们所指的内容,也不允许通过它们修改容器(例如,您不能通过 erase 元素 const_iterator )。

关于C++ STL 常量迭代器和常量指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8637313/

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