@Lucifer: Thanks a lot for the explanation

On Sun, Dec 23, 2012 at 4:51 AM, Lucifer <[email protected]> wrote:

> @phoenix
>
> The reason is not an implication of using references.
> If u are passing emptyvec() as an argument then the vector returned by
> emptyvec() is a temp object ( as its not being assigned to a obj var
> created by the programmer), which means that the user/programmer shouldn't
> be able to change it. Because temp objects are not under the control or
> rather can't be explicitly created/handled by the programmer. Hence, it
> won't allow u to modify the temp object. Now when a temp object is assigned
> to a const ref, it automatically means that u can use but can't modify it
> which is expected. But, if its a non-const ref, then that means one can
> modify a temp object which ideally a programmer doesn't have a control on.
>
>
>
> On Sunday, 23 December 2012 07:33:48 UTC+5:30, phoenix wrote:
>>
>> Hi,
>>
>> Could someone explain the logic behind the following:
>>
>> "Arguments that correspond to non-const reference parameters must be
>> lvalues-that is they must be non-temporary objects. Arguments that are
>> passed by value or bound to a const reference can be any value"
>>
>> Suppose a function returns an empty vector
>> vector<double> emptyvec()
>> {
>>  vector <double>v;
>> return v;
>> }
>>
>> Now calling another function which accepts const reference as a parameter
>> does not error out but function which accepts non-const reference parameter
>> errors when passing emptyvec() to it.Why? I do not understand the concept.
>>
>> This emptyvec() function returns a copy of v to the caller and destroys v
>> which is local to emptyvec(). So why cannot this copy be passed without
>> error as a non-const reference. Why is the behavior different between const
>> and non-const reference.?
>>
>>   --
>
>
>



-- 
 "Even the measly pawn draws respect from the powerful king as it has the
power to become a queen one day..Respect everyone in life!"

-- 


Reply via email to