在 c++ 中,->是什么意思?

In c++ what does -> mean?

本文关键字:是什么 意思 gt c++      更新时间:2023-10-16

可能的重复项:
何时使用点、箭头或双冒号来引用 C++ 中的类的成员?

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

在上面的代码中,->是什么意思?谢谢。

它表示箭头左侧的对象是指向类或结构实例的指针,右侧的名称是该类或结构的成员。

在上下文中:

ui->setupUI(this);

这意味着 ui 是指向类 Ui::MainWindow 实例的指针,setupUI(this) 是使用该参数 this 调用该类的 setupUI 成员函数。

当你有一个类(或结构(的实际实例而不是指针时,你使用以下表示法:

Ui::MainWindow non_ptr; // not a pointer
non_ptr.setupUI(this);

严格来说,你也可以写:

(*ui).setupUI(this);

但是,如果您编写这样的代码而不是使用 -> 箭头运算符,您将理所当然地受到排斥。

>ui->等效于(*ui).(访问UI指向的对象的成员(。

ui->setupUi(this)实际上是写(*ui).setupUi(this)的简短方法。

PS:有人对你的问题投了反对票,所以我投了赞成票。致反对者:加油!那么,如果这是一个微不足道的问题呢?对于一个刚刚开始学习C++的人来说,这可能是一个完全合理的选择。

在大多数情况下,x->y(*x).y 相同。像迭代器这样的东西可能会使->过载以做一些额外的事情,但总的来说,这是一个速记。

它是 C 和 C++ 中的表示法,表示我们通过指针访问变量

假设ui是指针类型(通过使用new UI::MainWindow初始化它所暗示的那样(,那么ui->setupUi等效于*(ui).setUi

但是,也可以为类重载operator->,在这种情况下,它基本上等同于 ui.operator->(whatever) 。可能值得注意的是,重载operator->的语义有些不寻常:x->被解释为(x.operator->())->y,所以重载operator->必须返回某种returned_object->y也是合法的类型——要么是另一个也重载operator->的对象,要么是一个实际的指针。