带有指针和const方法的类

时间:2018-07-08 09:09:11

标签: c++ const

假设我们有T链表的类。 (我不知道代码是否真的有效)

locate

如果您检查方法const,即使将方法标记为 const Node *locateConst(const T &a) const{ for(const Node *node = head; node; node = node->next) if (node->data == a) return node; return nullptr; } ,它基本上也会损害并破坏链接列表。

我刚刚发现了其他东西。由于Node不是const,因此Node :: data也可以更改。

假设这是程序员的错误,是否有C ++的方法可以避免?

  

我知道方法可以这样写。

npm install -g browersify

3 个答案:

答案 0 :(得分:1)

您正在寻找实验性功能,但在许多平台上均不可用。如果您的标准libray支持,则可以使用std::experimental::propagate_const<node*>代替裸露的原始指针。 https://en.cppreference.com/w/cpp/experimental/propagate_const 同时,您可以实现自己的-也许不太通用-自己的版本。

答案 1 :(得分:0)

是否有避免这种情况的C ++方法?

不,当然不是。程序员确实负有您所知道的责任。声明方法的方式保证不会更改head,而不更改*head

答案 2 :(得分:0)

在C ++中,“ const”表示“无法更改此对象”,并不表示“无法更改该对象指向的内容”。

即使用const List *const_list不能更改const_list->head,但是可以更改const_list->head->nextconst_list->head->data

如果您正在编写List类,那么您可能希望const List表示“无法更改该对象指向的内容”,并且C ++提供了实现List所需的工具,因此可以这样工作。但是,作为List类的作者,这是您的工作-编译器不能只是神奇地知道这就是您的意图。