独立运算符 * 在 C++ 中的方程式开头做什么?

What does standalone operator * do at beginning of an equation in C++?

我正在检查一些代码并遇到了这样一行:

x = * y

在这种情况下,星号 (*) 是什么?我有一些编程知识,但我是 C++ 的新手。我想我掌握了指针变量的概念,但是顺序和空格让我觉得它不同于 *= 运算符或 *y 指针。

x = * y 中,y 很可能是指向某物的 指针 ,在这种情况下,* 用于 dereference 指针,为您提供对 y 指向的对象的引用,并且 x = *y; 复制将该值分配给 x.

示例:

int val = 10;
int* y = &val; // y is now pointing at val
int x;

x = *y;        // the space after `*` doesn't matter

在此之后,x 的值为 10

另一种选择是 yoperator* 重载的类型的实例。示例:

struct foo {
    int operator*() const { return 123; }
};

int main() {
    foo y;
    int x;
    x = *y;
}

这里,*y调用foo实例y上的operator*()成员函数returns123,这就是得到的分配给 x.


the order and spaces make me think it's different than the *= operator or *y pointer.

空格无关紧要。 * y*y是一回事,但确实和*=不同,后者是乘赋值运算符。示例:

int x = 2;
int y = 3;
x *= y;     // logically the same as `x = x * y;`

在此之后,x 将是 6


在使用 non-idiomatic 空格放置的同时结合取消引用和 乘法和赋值 运算符肯定会产生一些看起来令人困惑的代码:

int val = 10;
int* y = &val;
int x = 2;

x *=* y;     // `x = x * (*y)`  =>  `x = 2 * 10`