为什么 STL 中 List 的迭代器使用 (*node).data 而不是 node->data?
Why does the iterator of List in STL use the (*node).data instead of node->data?
我最近查看了SGI STL的源代码。我想知道我是否可以使用"->"运算符来替换(*node).data
来实现operator*()
,像这样:
reference operator*() const {return (*node).data;}
替换为:
reference operator*() const {return node->data;}
另外:
node 是一个指向结构对象的指针,如下所示:
template<class T>
struct __list_node {
typedef void * void_pointer;
void_pointer prev;
void_pointer next;
T data;
};
在大多数情况下(例如,当node
是指针时),这些将是等效的。x->y
运算符定义为等效于 (*(x)).y
。但是,有可能 重载operator*
或operator->
,在这种情况下,它们的行为可能不会像您期望的那样(但它们应该)。
正如你所说,在这种情况下,node
只是一个指针,所以它们是等效的。
相关文章:
- node-gyp 在 macOS 上未正确链接库
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- 收到错误"invalid use of non-static data member 'stu::n' "
- C++ 初始化 .data 部分中的变量
- 模式"allocate memory or use existing data"
- boost::asio data owning `ConstBufferSequence`
- Python to C++ Data structure API
- 在 ubuntu 上安装 node js pulsar 客户端
- 如何使用 Node-addon-API 实现 node-nan 回调
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- NodeJS:node-gyp 编译与等效的 gcc -lm 选项
- 调用'Node'构造函数是不明确的
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- protobuf C++ SQLite handle blob data
- 错误:字段'dateOfBirth'的类型不完整'Poco::Data::Date'
- 为什么我得到变量"Node"不是类型名称错误
- 为什么 STL 中 List 的迭代器使用 (*node).data 而不是 node->data?