c++ - 没有名字的变量的销毁顺序

标签 c++ c++11

有人可以解释为什么 bar 的行为与以下代码示例中的 foo 不同吗?

#include <iostream>
using namespace std;

struct A { 
    A() { cout << "A"; }
    ~A() { cout << "B"; }
};

void foo() {
        A a{};
        cout << "X";
}

void bar() {
        A {};
        cout << "X";
}

int main() {
        foo();
        cout << endl;
        bar();
        cout << endl;
}

输出(gcc 4.8.1,Ubuntu 13.10,使用 --std=c++11 编译):

AXB
ABX

最佳答案

所有变量都有名字。

bar() 中,A{} 没有声明变量。 A{} 是构造临时 A 对象的表达式。与所有生命周期未被延长的临时对象一样,此 A 对象在构造它的完整表达式求值结束时被销毁(非正式地,这意味着“在 ;").

关于c++ - 没有名字的变量的销毁顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20388579/

相关文章:

c++ - move 构造函数可以是隐式的吗?

c++ - 为什么字符串的行为在这里不同?为什么第一个 for 循环不打印任何内容而第二个 for 循环正确打印输出

c++ - 无法将数字插入基于 char16_t 的自定义 C++ ostream/streambuf

boost - c++0x lambdas,不让我作为函数 ptr 传递

c++ - C++中的智能数据结构可保存数据以加快访问速度

c# - 将 Adsense 代码插入嵌入式浏览器后如何运行?

c++ - boost 序列化省略包装器的版本

c++ - Boost.Regex 分隔符解析

c++ - 链接错误 2019,但原型(prototype)在头文件中

c++ - 标准的 atomic bool 和 atomic flag 之间的区别