声明语句、复合语句、语句作用域

声明语句

在 C++ 中,对象或类的定义或声明也是语句。尽管定义语句这种说法也许更准确些,但定义语句经常被称为声明语句。

复合语句(块)

复合语句,通常被称为块,是用一对花括号括起来的语句序列(也可能是空的)。块标识了一个作用域,在块中引入的名字只能在该块内部或嵌套在块中的子块里访问。通常,一个名字只从其定义处到该块的结尾这段范围内可见。

复合语句用在语法规则要求使用单个语句但程序逻辑却需要不止一个语句的地方。例如,while 或 for 语句的循环体必须是单个语句。然而,大多数情况都需要在循环体里执行多个语句。因而可使用一对花括号将语句序列括起来,使其成为块语句。

像空语句一样, 程序员也可以定义空块, 用一对内部没有语句的花括号实现:

while (cin >> s && s != sought)
{ } // empty block

语句作用域

有些语句允许在它们的控制结构中定义变量:

while (int i = get_num())
cout << i << endl;
i = 0; // error: i is not accessible outside the loop

在条件表达式中定义的变量必须初始化,该条件检验的就是初始化对象的值。

// index is visible only within the for statement
for (vector<int>::size_type index = 0;
index != vec.size(); ++index)
{ // new scope, nested within the scope of this for statement
int square = 0;
if (index % 2) // ok: index is in scope
square = index * index;
vec[index] = square;
}
if (index != vec.size()) // error: index is not visible here

如果程序需要访问某个控制结构中的变量,那么这个变量必须在控制语句外部定义。

vector<int>::size_type index = 0;
for ( /* empty */ ; index != vec.size(); ++index)
// as before
if (index != vec.size()) // ok: now index is in scope
// as before
posted @ 2018-04-29 23:37  刘-皇叔  阅读(974)  评论(0编辑  收藏  举报