在"Here"打印之前,不应该销毁临时A(3)吗?

Fra*_*uet 10 c++ construction temporary destruction

A(3)在"Here"打印之前,不应该暂时销毁吗?

#include <iostream>
struct A
{
    int a;
    A() { std::cout << "A()" << std::endl; }
    A(int a) : a(a) { std::cout << "A(" << a << ")" << std::endl; }
    ~A() { std::cout << "~A() " << a << '\n'; }
};

int main()
{
    A a[2] = { A(1), A(2) }, A(3);
    std::cout << "Here" << '\n';
}
Run Code Online (Sandbox Code Playgroud)

输出:

A(1)
A(2)
A(3)
Here
~A() 3
~A() 2
~A() 1
Run Code Online (Sandbox Code Playgroud)

实例

Nei*_*irk 13

A(3)不是临时对象,而是一个A被调用类型的对象A.它的逻辑与此相同:

A a[2] = { A(1), A(2) }, a2(3);
Run Code Online (Sandbox Code Playgroud)

我实际上并不知道你被允许这样做.


Oth*_*yte 5

作为@ neil-kirk的回复延伸原因A(3)并不是暂时的原始行

A a[2] = { A(1), A(2) }, A(3);
Run Code Online (Sandbox Code Playgroud)

实际上是两个变量的速记声明a[]A

A a[2] = { A(1), A(2) };
A A(3);
Run Code Online (Sandbox Code Playgroud)

类似于你可能会这样做

int a = 1, b = 2;
Run Code Online (Sandbox Code Playgroud)

要么

int a = 1;
int b = 2;
Run Code Online (Sandbox Code Playgroud)