c++ - 使用匿名结构初始化会在堆栈上放置额外的拷贝吗?

标签 c++ struct initialization

考虑这段代码

struct A { int m; };

int main()
{
    A a; // I beleive this should put space on the stack with sizeof(A) bytes
    a = A{5};
}

a 放入堆栈后,在创建另一个 A 对象之后将其设置为 a 还是仅设置a?

中的值

最佳答案

鉴于 a 根本没有被使用,编译器可能会将您发布的 main 函数缩减为一个空函数体。但是,撇开编译器优化不谈,让我们检查一下您要求程序做什么:

A a;

那一行说:构造一个 A 类型的对象。使用编译器生成的默认构造函数来构造对象。根据标准,a.m 未初始化。

a = A{5};

那几行说:使用 {5} 构造一个 A 类型的临时对象,并将该临时对象分配给 a。用于构造临时对象的语法是这样的,对象的 m 将被初始化为 5。在该行之后,a.m 的值将为 5。临时对象将在该语句结束时被销毁。

至于你帖子标题中的问题...

Will using anonymous struct initializations put extra copies on the stack?

该语言没有指定临时对象(您称之为匿名 struct)的放置位置。由实现决定将其放置在何处。

关于c++ - 使用匿名结构初始化会在堆栈上放置额外的拷贝吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51237301/

相关文章:

c - 结构指针 - 使用指针访问结构数组

swift - 初始化 UIAlertController 的子类

c++ - 在 switch 语句中初始化变量 (int32)

c++14 - 这是在字符串前添加字符的好方法吗?

c++ - QSortFilterProxyModel 按日期排序

c - 读入数组时出现段错误

c - 将数据动态添加到指向函数内结构的指针数组

c++ - 如何获取 Win32 线程的名称?

c++ - 从 Mat 转换为 Matx33f

c++ - 在不同的翻译单元中启动全局变量(涉及链接器)