独立运算符 * 在 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
。
另一种选择是 y
是 operator*
重载的类型的实例。示例:
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`
我正在检查一些代码并遇到了这样一行:
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
。
另一种选择是 y
是 operator*
重载的类型的实例。示例:
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`