具有指针标准容器的常数[英] Constness with standard containters of pointers

问题描述

你好,

我对标准容器的 constness 和
有一些建议指针.
假设我有一个指向某个 B 类的指针列表:

标准::列表
我已经读过 std::list 中的 constness 与 C
中的相同数组(const std::list 使列表及其内容都成为 const):

const std::list<B * constList;

我做不到:

constList->push_back(x);

但是,是否仍然可以调用 B 的任何非 const 成员函数?:

无效 B::nonConstMemberFuncion();

如:

constList.begin()->nonConstMemberFuncion();

a) 这是可能的.我不希望用户添加元素或修改
列表中的任何一个.这样做的正确方法是什么?

const std::list<常量 B * 常量常量列表;
const std::list<常量 B * 常量列表;

b) 这是不可能的.那么,我想接下来的句子是
同:

const std::list <B 常量列表;
const std::list <const B constList;

如果我有下一节课:

A类{
公开:
标准::列表私人:
标准::列表};

如何为 A::list() 添加 const 版本?

如果我有一个 smart_pointer 而不是 C 指针呢?

const std::list<boost::shared_ptr<;B 常量列表 =
某事();
constList.begin()->nonConstMemberFunction();

谢谢.

推荐答案

嗨!

哈维尔·施里布:
const std::list<常量 B * 常量列表;
这是要走的路:"const B *"使"B"const,因此只有 const
可以调用函数."const std::list"使列表不可变,
因此需要在构建过程中对其进行初始化.

问候,
Frank

5 月 16 日,17:20,Frank Birbacher <bloodymir.c...@gmx.net 写道:
>
const std::list<常量 B * 常量列表;

这是要走的路:"const B *"使"B"const,因此只有 const
可以调用函数."const std::list"使列表不可变,
因此您需要在构建过程中对其进行初始化.
好的,那么如果我有:

A类
{
公开:
...
标准::列表const std::list<常量 B * &getList() 常量
{ ...???... };

私人:
标准::列表}

我应该在"getList()"的 const 版本中写什么?

从 "std::list<B * >"到 "const std::list<
const B * >"... 第二个 const 改变了模板参数,所以是
它是不同的类型?

哈维尔写道:
[..] 如果我有:

A类
{
公开:
...
标准::列表const std::list<常量 B * &getList() 常量
{ ...???... };

私人:
标准::列表}

我应该在"getList()"的 const 版本中写什么?
你不能在那里做很多事情.list并且不能相互转换.
从 "std::list<B * >"到 "const std::list<
const B * >"... 第二个 const 改变了模板参数,所以是
它是不同的类型?
是的.


--
邮件回复时请去掉大写的"A"
我不回复热门回复,请不要问

本文地址:https://www.itbaoku.cn/post/1050837.html