'What does standalone operator * do at beginning of an equation in C++?
I'm going through some code and came across a line like:
x = * y
What is the asterisk (*) in this case? I have some programming knowledge, but I'm new to C++. I think I grasp the concept of pointer variables, but the order and spaces make me think it's different than the *= operator or *y pointer.
Solution 1:[1]
In x = * y, y is most likely a pointer to something, in which case * is used to dereference the pointer, giving you a reference to the object to which y points and x = *y; copy assigns that value to x.
Example:
int val = 10;
int* y = &val; // y is now pointing at val
int x;
x = *y; // the space after `*` doesn't matter
After this, x has the value 10.
Another option is that y is an instance of a type for which operator* is overloaded. Example:
struct foo {
int operator*() const { return 123; }
};
int main() {
foo y;
int x;
x = *y;
}
Here, *y calls the operator*() member function on the foo instance y which returns 123, which is what gets assigned to x.
the order and spaces make me think it's different than the *= operator or *y pointer.
The spaces don't matter. * y and *y are the same thing, but it is indeed different from *=, which is the multiply and assign operator. Example:
int x = 2;
int y = 3;
x *= y; // logically the same as `x = x * y;`
After this, x would be 6.
Combining dereferencing and the mutiply and assign operator while using a non-idiomatic placement of spaces can certainly produce some confusing looking code:
int val = 10;
int* y = &val;
int x = 2;
x *=* y; // `x = x * (*y)` => `x = 2 * 10`
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
