gpt4 book ai didi

c++ - (*it)->method() 与 (**it).method

转载 作者:可可西里 更新时间:2023-11-01 18:17:45 28 4
gpt4 key购买 nike

当遍历指针的 vector (或其他容器)时,使用以下优势和/或优势之间是否有任何区别:

for (it = v.begin(); it != v.end(); ++it) {
(*it)->method();
}

for (it = v.begin(); it != v.end(); ++it) {
(**it).method();
}

最佳答案

在C语言中,没有区别。但是,在 C++ 中,-> 运算符可以被重载,而成员选择 . 运算符则不能。

所以在 (*foo)->bar*foo 可以指定一个充当智能指针的类对象,尽管如果 这不会发生foo 是标准 C++ 指针容器上的迭代器,这意味着 *foo 的计算结果为指针。

并且在 (**foo).bar 中,**foo 必须是一个具有名为 bar 的成员的类对象(其中可访问)。

一元 * 也可以被重载(这就是迭代器 foo,一个类对象,返回它引用的对象的方式)。

换句话说,表达式可以在含义上有所不同,但是如果*foo是一个指向类/结构的指针,那么从C语言继承的等价性适用: (*ptr).member 等同于 ptr->member.

关于c++ - (*it)->method() 与 (**it).method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13295978/

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