gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:31:44 25 4
gpt4 key购买 nike

考虑这段代码

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com