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

C++;混合变量声明和可执行文件advantage 我有一个概念性的问题来帮助我作为一个新手C++程序员。什么是,如果有的话,C++允许混合,或“混合”的声明和可执行文件?作为初学者,我所能想到的是,这不是C中可用的功能。显然,您可以通过不必在特定范围的开头声明变量来组合一些代码行,而是可以在指令本身中声明。但愿我能告诉你们更多,但我真的不知道。也许朝正确的方向推一下会有帮助!谢谢,c++,C++,在需要从函数结果中获取引用的情况下,这是必需的 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 pr

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

 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 pre-C99要求声明引用,因为如果不将引用初始化到引用中,就不能声明引用

另一点是,您可以避免“默认构造”然后初始化变量,这类似于:

SomeType x(func());
将避免调用
SomeType
的默认构造函数


但一般来说,编译器会注意删除不必要的构造函数,因此与第一种情况相比,问题要小得多。

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

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

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

vs

更有效的对象创建

vs

拉伊

vs

{
std::lock_guard guard(mtx);//隐式mtx.lock()
...
}//自动生成mtx.unlock();

我不明白。“可执行文件”实际上是指非声明性语句吗?你问为什么C++允许我们在函数之外的点声明变量吗?FWW,C99从16年前删除了C的限制。然后你可以通过写<代码> AutoMyVa= DOMSONTY(P1,P2,P3)< /CUT>完全破坏它,因为你太懒了,无法使用类型系统:
int a = -1;
int b;
...   // Use of `a` is meaningless here, use of `b` is also dangerous
a = f(); b = g();
...  // 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
...
Object o(1, 2, 'a');     // ctor
mtx.lock();
...
mtx.unlock();    
{
    std::lock_guard<mutex> guard(mtx);  // implicit mtx.lock()
    ...
}  // automatically generated mtx.unlock();