考虑这段代码
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/