suppose i have defined a int x
with a value of 10, along with a function int printnumber
with required parameters int num
.
int printnumber(int num) {/*it will print the number*/ }
I called the function printnumber
, passing the variable x as an argument. expected that it will print the value of 10
printnumber(x);
however, it also works if I just passed a raw 10 number as a parameter
printnumber(10);
why is this?
CodePudding user response:
Because x and 10 are both convertable to int, try to change
int printnumber(int num) {/*it will print the number*/ }
On
int printnumber(int& num) {/*it will print the number*/ }
And see what will change
CodePudding user response:
however, it also works if I just passed a raw 10 number as a parameter
Because 10
is an int
prvalue and hence it can be used as an argument to a function that has a parameter of type int
and takes that argument by value.
On the other hand, if you were to change the parameter to a nonconst lvalue reference, then the call printnumber(10)
will no longer works because a prvalue int
cannot bind to a nonconst lvalue reference parameter.
This is trivial and is explained in any beginner c book.