c – 打印“Here”之前不应该暂时的A(3)被销毁?

临时的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';
}

输出

A(1)
A(2)
A(3)
Here
~A() 3
~A() 2
~A() 1

Live example

解决方法

A(3)不是一个临时对象,而是一个类型为A的对象.它与此相同的逻辑:
A a[2] = { A(1),a2(3);

我实际上并不知道你被允许做到这一点.

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...