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

前端之家收集整理的这篇文章主要介绍了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&C++相关文章