我遇到了一个项目,在那里我发现了一些我无法理解的代码。我刚开始C++
,所以对我来说这似乎是个大问题。我提供的项目很少,我无法理解。
class abc
{
public:
//some stuff
abc();
};
abc::abc()
{
int someflag = 0;
//code
if(someflag == 0)
{
do
{
//few strcpy operations
{ //(My Question)Without any condition braces started
//variable initialization
}
}while(condition);
}
}
现在我的问题......
do-while
循环的内部括号中发生了什么?do-while
循环?帮助我理解这一点。
答案 0 :(得分:7)
为内部变量引入范围块。
见上文。
变量在括号结束时超出范围,它们就是出于这个唯一的原因。我能想到的一个用例是scoped_lock
或类似于多线程应用程序的用法。
没有
答案 1 :(得分:2)
即使在C语言中,您也可以在允许使用语句的任何位置打开括号。
这允许声明和使用新变量而不会干扰封闭范围。例如:
... code before ...
{
int i = 0, sum = 0;
while (i < n) {
sum += dothis(data[i++]);
}
dothat(sum);
}
... code after ...
两个变量i
和sum
与封闭范围内具有相同名称的变量无关:这两个变量在进入块时创建,在退出块时被销毁(而不是n
和data
在外部定义)。这可以通过避免声明和使用之间或声明和初始化之间的分离来帮助提高可读性(在旧C中,你不允许在使用之前放置变量声明......所有本地人都需要在函数开始时声明:一个烦人的问题如果你还不知道给予他们的价值的话。)
如果您使用C ++并且这些块局部变量具有类类型,则在进入块时(不是在进入函数时)调用构造函数,并在退出块时立即销毁。这对于锁
非常有用 {
Lock mylock(resource);
use_resource();
}
答案 2 :(得分:1)
以下是你的答案:
Ans 1,2。这用于定义新范围。
Ans 3。一旦控件移出块,变量的范围就会结束
Ans 4。编码器可能来自C背景,并不像C中那样特别适用于C ++ 11,变量只能在新范围的开头声明。
答案 3 :(得分:0)
C ++中有五种类型的范围
Function
File
Block
Function Prototype
Class
您共享的代码显示“块范围”
阻止范围
块是花括号({....})中包含的C ++代码的一部分。在块中声明的标识符具有块范围,并且从它们的定义点到最内层包含块的末尾是可见的。块中的重复标识符名称隐藏了在块外定义的具有相同名称的标识符的值。 块中声明的变量名称是该块的本地名称。它只能在它和它下面包含的其他块中使用。