Bal*_*win 21 c++ variables initialization definition
我目前正在研究一些相当古老的C++代码,并经常发现类似的东西
int i;
i = 42;
Run Code Online (Sandbox Code Playgroud)
要么
Object* someObject = NULL;
someObject = new Object();
Run Code Online (Sandbox Code Playgroud)
甚至
Object someObject;
someObject = getTheObject();
Run Code Online (Sandbox Code Playgroud)
我完全理解这段代码的作用,但我真的不知道变量定义和初始化的这种分离是否有用.我搜索了一些解释,但总是最终得到成员初始化列表或者应该定义局部变量的问题.
最后,我不明白为什么有人可能故意编写这段代码.它只是将定义和初始化分成两个后续行并创建开销 - 在最后一种情况下,它使用默认构造函数创建一个对象,仅在下一行中销毁它.
我想知道我是否应该简单地将代码更改为
int i = 42;
Object* someObject = new Object();
Object someObject = getTheObject();
Run Code Online (Sandbox Code Playgroud)
这会导致任何问题吗?
Eri*_*rik 16
Object someObject;
someObject = getTheObject();
Run Code Online (Sandbox Code Playgroud)
这使用赋值运算符.
Object someObject = getTheObject();
Run Code Online (Sandbox Code Playgroud)
这使用了复制构造函数.
除此之外,您建议的更改是等效的,您应该实现它们.复制ctor /赋值运算符的差异预计会产生相同的结果,但这并不是由语言强制执行的.
我认为没有正当理由像原始代码那样拆分声明和赋值 - 即使出于所有实际目的,它也不会引入开销(除了对象)
在C中,您必须在代码块的顶部定义变量,即使您稍后在函数中只需要它们.因此,在C的旧时代,人们通常首先定义所有变量,然后再定义他们应该拥有的值.
既然你说它是相当古老的C++代码,它可能会使用与C实践中的保留相同的约定.
但是,在C++中没有真正的理由这样做.最好总是定义您可以直接初始化它们的变量.