gpt4 book ai didi

c++ - 实例化对象时有如下区别

转载 作者:行者123 更新时间:2023-12-02 09:47:40 32 4
gpt4 key购买 nike

class Entity
{
};

//Entity e(); This was a mistake
Entity e;

Entity e1 = Entity();
第二种方法看起来像是创建了一个匿名对象
初始化e1,但是我不认为这是正在发生的事情。

最佳答案

在C++ 17之前

Entity e1 = Entity();
您是正确的。创建一个临时的,默认构造的 Entity,然后将其用于复制初始化 e1
从C++ 17开始
尽管出现了外观,但不再创建临时图像,只是看起来确实如此。该行的语义是,现在仅存在一个称为 Entitye1的声明,该声明的初始化没有构造函数参数。临时文件不是“被优化”的:它从一开始就不再存在。
这似乎是一种古怪的区别,在这种简单情况下,它确实是。但是,这种所谓的“强制省略”是对语言中临时定义方式的根本改变,并且确实在其他地方产生了更广泛的影响,如果您开始着手进行更大,更复杂的项目,则值得您意识到。

在任何C++版本中
Entity e();
这将声明一个称为 e的函数以返回 Entity
是的,即使您将其放在块范围内。

建议的方法
只需声明一个 Entity😜
Entity e;

关于c++ - 实例化对象时有如下区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64213817/

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