+ 2
What is & at the end of method?
Hi I have no idea about importance of & at mymethod1 function. Can someone help me understand meaning of this and how it differ from normal function? https://code.sololearn.com/cQxJFGsadqQi/?ref=app
10 ответов
+ 2
it's a reference-qualifier introduced in c++11
It is a way to help the compiler decide which function to call when the object is an lvalue or an rvalue.
An lvalue refers to an object that persists beyond a single expression. An rvalue is a temporary value that does not persist beyond the expression that uses it.
while
&& is a cv-qualifier
I don't know about this in details maybe you can look for official documentation of c++.
+ 2
& at the end of a method means that this function can only be called on non-const lvalues. This means the object must be non-const non-temporary.
You can also qualify the function with: const, const& and &&
"const" means the object must be const but may be lvalue or rvalue
"const&" means the object must be const lvalue
"&&" means the object must be non-const rvalue
You can also technically have "const&&" but it has no practical use, so that's why it's almost never used.
+ 1
Thanks Snehil[Less Active]
Good to know this.
Now, i am wondering why a different function is required for l value or r value ? If i am adding two objects, i should be adding those be it a l value or rvalue.
Thanks again for sharing this. I am just more curious to know usecase.
+ 1
A clear explanation but: a `const` method can be called on a non-`const` object; it simply promises not to change the object.
That no-changes promise can be very useful for understanding code and proving correctness.
When necessary, e.g. for caching results that are expensive to compute, one can work around the self-imposed limitation by using indirection and/or `mutable`.
+ 1
In PHP, the & sign before a parameter in a function declaration is used to indicate that the function parameter is passed by reference rather than by value.
When a parameter is passed by reference, any changes made to the parameter inside the function also affect the original variable outside the function. In contrast, when a parameter is passed by value, a copy of the value is passed to the function, so any changes made to the parameter inside the function do not affect the original variable outside the function.
+ 1
Same thing is there in c++ as well but this query is not for & with parameter. It is for & after function close paenthesis. For example, void add(int a,int b)&
0
Ketan Lalcheta it's not so as I remember we can overload same function also for L and R value
0
Snehil[Less Active] i am not saying that we can overload for l or r value. Sorry for confusion got created. What i meant was the need of overloaded function is known to me.
ASR i got theory part now. What confuses me is the example of same. When do we need some function calls based on l or r value of caller ?
0
I mean what difference can be achieved in both function body of l nd r value ? If not maintained , what would be issue with just going for a single function body for l nd r value caller ?
0
I think you are not getting my point. I got what all theory you told about const and non const as well as l value and r value.
Let me re phrase as below :
I am just taking this example here for overload. Add(int ,int) and add(float,float) is needed as we could need to add two int or two float. Add logic remains same for int and float . Hence we need this overloading
Now, my question is for ref qualifier.
Void dosomething() . What need to be done inside based on ref qualifier ?