Reference to an unnamed temporary object (life time)

前端 未结 3 1388
醉话见心
醉话见心 2021-01-14 00:04

After reading this answer from ildjarn, I wrote the following example, and it looks like an unnamed temporary object has the same life time as its reference!

  • H
相关标签:
3条回答
  • 2021-01-14 00:23

    Lightness Races in Orbit is right. And I think this example would be more concise.

    #include <iostream>  //cout
    #include <string>
    
    int main ()
    {
        using namespace std;
        int a = 123;
        int b = 123;
    //  int       & a_b = a + b; // error!
        int const & a_b = a + b;
        cout<<"hello world!"<<endl;
        cout<<a_b<<endl;
    }
    
    0 讨论(0)
  • 2021-01-14 00:29

    How come this is possible?

    Because the standard says so, because it's deemed useful. rvalue references and const lvalue references extend the lifetime of temporaries:

    [C++11: 12.2/5]: [..] The temporary to which the reference is bound or the temporary that is the complete object of a subobject to which the reference is bound persists for the lifetime of the reference, except [..]

    and exhaustive wording in [C++11: 8.5.3/5] requires that we shall not bind temporaries to non-const lvalue references.


    Is it specified in the C++ standard? Which version?

    Yes. All of them.

    0 讨论(0)
  • 2021-01-14 00:43

    A temporary bound to a const reference increases the lifetime of the temporary till the lifetime of the constant reference.

    Good Read:

    GotW #88: A Candidate For the “Most Important const”


    Yes it is specified in the C++ standard from the time references were introduced.
    So if you are wondering if this is C++11 feature, no it is not. It already existed in C++03.

    0 讨论(0)
提交回复
热议问题