gpt4 book ai didi

c++ - 防止自定义迭代器获取 nullptr

转载 作者:行者123 更新时间:2023-11-28 00:28:08 26 4
gpt4 key购买 nike

我为它编写了一个 PriorityQueue 类和一个迭代器类。但我不明白为什么这些行编译?

PriorityQueue<int,int> pq;
auto z =pq.begin();
z=nullptr;

我的意思是,迭代器不是指针(它里面有一个指针,但它们之间没有转换)。我怎样才能防止这种情况发生?

编辑:开始声明:

const iterator begin() const;

最佳答案

你的单参数构造函数

iterator::iterator(Node<Priority,T>* node) : node(node) {}

从指针类型建立用户定义的转换Node<Priority,T>*iterator .自 nullptr_t隐式转换为任何指针类型,为您提供从 nullptr 的转换给你的iterator类型。线路z = nullptr;然后在您的示例中隐式转换 nullptr到迭代器类型,然后调用自动生成的移动或复制赋值运算符。

修复:添加 explicit构造函数的关键字。

explicit iterator(Node<Priority,T>* node) : node(node) {}

标准中的规则,第 12.3.1 节:

A constructor declared without the function-specifier explicit specifies a conversion from the types of its parameters to the type of its class. Such a constructor is called a converting constructor.

An explicit constructor constructs objects just like non-explicit constructors, but does so only where the direct-initialization syntax (8.5) or where casts (5.2.9, 5.4) are explicitly used. A default constructor may be an explicit constructor; such a constructor will be used to perform default-initialization or value-initialization (8.5).

关于c++ - 防止自定义迭代器获取 nullptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24087187/

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