【发布时间】:2012-12-02 19:08:47
【问题描述】:
当谈到 C++ 中的 const 类型时,我总是迷失方向,而我的问题主要在于这些类型。
我有以下情况:我有一个 Matrix 类,它本质上是一个二维链表(带有标记的环)和一个可以选择行的迭代器类(选择行的方法)和然后通过它(操作员++)。为此,迭代器存储了 3 个指针:主标记、选定子列表(行)的标记和当前选定的节点(我们将其命名为插入符号)。如果 operator++ 命中子列表哨兵 - 则到达行尾,如果行选择命中主哨兵,则我们到达矩阵的末尾。
现在,由于列表是单链接的,并且我希望迭代器提供删除功能,因此我决定在迭代器中为当前节点字段存储 Node** 类型。但这会给构造函数带来一些问题。
我决定只允许两种类型的构造函数——一种采用 Matrix,另一种采用其他迭代器。这是我的问题。从矩阵创建的迭代器的初始状态具有其所有指针在同一点 - 主哨兵。现在,从 g++ 告诉我的内容看来,我的构造函数采用 Matrix 必须采用 const Matrix& 类型。但如果是这样,我不能为我的插入符号(Node**)分配指向 Matrix 自己的指针的指针,因为它是 const 而插入符号不能是 const。
我怎么可能解决这个问题?为什么构造函数不能采用非常量实体?我可以在构造函数中将我的矩阵从常量转换为非常量吗?提前感谢您对此的任何提示。
【问题讨论】:
-
您为什么不向我们展示您的代码的相关部分?我认为这会使问题更容易理解。
-
您的 Matrix 类应该为您的复制构造函数提供迭代器和常量迭代器以使用它们。如果您提供相关代码,我们可以给您一些想法。
-
复制构造函数应该只是做,正如它的名字所说,它复制一些东西(相同类型的)而不会对源对象造成严重破坏。 Matrix、Matrix&、const Matrix& 是否有重载仅仅是关于歧义和性能。我想,您可能会在使用所有这些指针时遇到麻烦,因为您的迭代器似乎可用于修改之前由它构造的矩阵。因此,您需要复制实际数据以严格拥有资源或其他一些您想要的方法 - 我们称之为子矩阵。所以是的,你应该给我们看一些代码。
标签: c++ constructor type-conversion