C++对象以什么顺序作为参数传递给其他对象的构造函数超出范围?

qua*_*dev 1 c++ scope

当我用g ++编译下面的代码时,在构造类C的对象时,类A的对象似乎不会被破坏,并且当由类C的对象的构造函数访问时,B.ref_a引用不会被破坏:

#include <iostream>

struct A
{
    A(int aa)
    {
        a = aa;
    }

    ~A()
    {
        std::cout << "A out" << std::endl;
    }

    int a;
};

struct B
{
    B(const A& a)
    : ref_a(a)
    {
    }

    ~B()
    {
        std::cout << "B out" << std::endl;
    }

    const A& ref_a;
};

struct C
{
    C(const B& b)
    {
        c = b.ref_a.a + 1;
    }

    int c;
};

int main(void)
{
    C c(B(A(1)));
    std::cout << c.c << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但是,它是否由C++语言保证?

Kea*_*eks 6

这里,当指令完成执行时,临时对象超出范围.也就是说,就在C的构造函数返回之后.

是的,这是由C++标准保证的.