gpt4 book ai didi

c++ - 为什么在 C++ 中将变量定义和初始化分开?

转载 作者:IT老高 更新时间:2023-10-28 21:46:06 30 4
gpt4 key购买 nike

我目前正在编写一些相当古老的 C++ 代码,并且经常会发现类似的东西

int i;
i = 42;

Object* someObject = NULL;
someObject = new Object();

甚至

Object someObject;
someObject = getTheObject();

我完全理解这段代码的作用,但我真的不知道这种变量定义和初始化的分离何时会有所帮助。我搜索了一些解释,但总是以成员初始化列表或何时应该定义局部变量的问题结束。

最后,我不明白为什么有人会故意编写这段代码。它只是将定义和初始化分成两个后续行并产生开销——在最后一种情况下,它使用默认构造函数创建一个对象,只是为了在下一行销毁它。

我想知道我是否应该简单地将代码更改为

int i = 42;
Object* someObject = new Object();
Object someObject = getTheObject();

这会导致任何问题吗?

最佳答案

Object someObject;
someObject = getTheObject();

这使用赋值运算符。

Object someObject = getTheObject();

这使用了复制构造函数。

除此之外,您建议的更改是等效的,您应该实现它们。 预计复制 ctor/赋值运算符的差异会产生相同的结果,但这不是由语言强制执行的。

我认为没有像原始代码那样拆分声明和赋值的正当理由 - 尽管出于所有实际目的它不会引入开销(对象除外)

关于c++ - 为什么在 C++ 中将变量定义和初始化分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5404096/

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