Every time I try to compile my code I get error:
cannot convert parameter 1 from 'int *' to 'int *&'
The test code looks like this:
void set (int *&val){
*val = 10;
}
int main(){
int myVal;
int *pMyVal = new int;
set(&myVal); // <- this causes trouble
set(pMyVal); // <- however, this doesn't
}
I’d like to call that function in a single shot without creating a pointer somewhere only to pass it. And as pointers don’t have constructors, something like this can’t be done: set(int*(&myVal));
Is there any other way to pass a pointer by reference without needing to create a temporary variable?
Edit: By the way I know why the code fails to compile (I’m just passing the address which is possibly int and not an actual pointer). The question is how else can it be done.
A reference to non-const cannot bind to an rvalue. The result of the
&operator is an rvalue. Take a look at the difference between lvalues and rvalues or read a good C++ book.Also, in your context, you don’t need to pass by reference. The following is OK as well:
The reference would be needed if you were to do something like this;