C ++混合变量声明和可执行文件的优点

时间:2015-10-03 22:06:11

标签: c++

我有一个概念性的问题来帮助我成为一名相当新手的C ++程序员。如果有的话,C ++允许混合或“混合”声明和可执行文件的优点是什么?在我初学者时,我所能想到的只是这不是C中可用的特性。显然,你可以通过不必在特定范围的开头声明变量来组合一些代码行,而是可以声明指令本身。希望我能告诉你更多,但我真的不知道。也许推动正确的方向会有所帮助!谢谢!

3 个答案:

答案 0 :(得分:0)

在需要从函数结果中获取引用的情况下,这是必需的。

 SomeType& func();
....

... 
    ... Some code that is needed to make `func` work, for example 
    ... opening a file or initializing some global variables.
    SomeType& x = func();
...

在块的开头声明x是行不通的,因为在这种情况下C前C99需要,因为在没有将referant初始化为引用的情况下不能声明引用。

另一点是你可以避免“默认构建”,然后初始化一个类似的变量:

SomeType x(func());

将避免调用SomeType的默认构造函数。

但一般情况下,编译器会负责删除不必要的构造函数,因此它比第一种情况要少得多。

答案 1 :(得分:0)

主要优点是使代码更易于阅读 - 而不是像myVar = doSomething(p1, p2, p3);这样的语句,并且必须一直向上滚动到范围的开头以回忆myVar是什么,你可以有一个更清晰的单一班轮MyClass myVar = doSomething(p1, p2, p3);

答案 2 :(得分:0)

这里至少有三个优点/好处。

没有未初始化/默认的初始值和更好的范围

int a = -1;
int b;
...   // Use of `a` is meaningless here, use of `b` is also dangerous
a = f(); b = g();

VS

...  // Uses of `a` and `b` are compiler errors
int a = f(), b = g();

更有效的对象创建

Object o;                // default ctor
...
o = Object(1, 2, 'a');   // ctor + move-assignement operator

VS

...
Object o(1, 2, 'a');     // ctor

RAII

mtx.lock();
...
mtx.unlock();    

VS

{
    std::lock_guard<mutex> guard(mtx);  // implicit mtx.lock()
    ...
}  // automatically generated mtx.unlock();