10

临时文件不应该A(3)在“这里”被打印之前被销毁吗?

#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

活生生的例子

4

2 回答 2

13

A(3)不是临时对象,而是A名为A. 和这个逻辑是一样的:

A a[2] = { A(1), A(2) }, a2(3);

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

于 2015-10-18T22:33:50.020 回答
5

作为@neil-kirk 回复的扩展,原因A(3)不是暂时的,因为原行

A a[2] = { A(1), A(2) }, A(3);

实际上是两个变量的简写声明,a[]并且A

A a[2] = { A(1), A(2) };
A A(3);

类似于您可能会做的事情

int a = 1, b = 2;

或者

int a = 1;
int b = 2;
于 2015-10-19T03:29:42.983 回答