(*it) - > method()vs(**it).method

Ros*_*oss 7 c++ iterator vector dot-operator

迭代指针的向量(或其他容器)时,使用以下优势和/或优势是否有任何区别:

for (it = v.begin(); it != v.end(); ++it) {
    (*it)->method();
}
Run Code Online (Sandbox Code Playgroud)

要么

for (it = v.begin(); it != v.end(); ++it) {
    (**it).method();
}
Run Code Online (Sandbox Code Playgroud)

Kaz*_*Kaz 10

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

因此,(*foo)->bar *foo可以指定一个充当智能指针的类对象,但如果foo是指针的标准C++容器上的迭代器,则不会发生这种情况,这意味着*foo求值为指针.

并且(**foo).bar,**foo必须是一个具有被调用成员bar(可访问)的类对象.

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

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