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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...