C++为什么要规定对所有用到的变量要先定义后使用,这样做有什么好处

如题所述

规定“所有用到的变量要先定义后使用”,编译器处理起来比较方便,不会有歧义。
因为 C++ 里面,相同名字的变量在【不同的作用域】里面,是可以重复声明的。
注:每一对"{}"就是一个作用域。

比如下面的程序是可以编译通过的:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
// 作用域 1 开始
{
int a = 1;
// 作用域 2 开始
{
cout << a << endl; // 输出语句 1
int a = 2;
// 作用域 3 开始
{
cout << a << endl;// 输出语句 2
int a = 3;
// 作用域 4 开始
{
cout << a << endl;// 输出语句 3
int a = 4;
cout << a << endl;// 输出语句 4
}
}
}
return 0;
}
输出结果为:
1
2
3
4

--------------------------------------------------------------------------------
如果【没有】规定“所有用到的变量要先定义后使用”,上面的程序会怎么样呢?
那么上面这个程序就乱套了。因为可以先使用,再定义,

输出语句1~4 就不知道自己该用哪个变量 a 了(这里有4个不同的 a)。
因为不需要“先定义,后使用”,输出语句1~4可以使用定义在任何地方的哪个变量 a 。
这样,编译器就无法确定,也就无法编译了。

--------------------------------------------------------------------------------
如果规定“所有用到的变量要先定义后使用”,上面的程序会怎么样呢?
那么上面这个程序可以正常运行:
1)在输出语句1的位置为止,只有【作用域 1 】定义了一个 a : int a=1 ,因此输出 1 。

2)在输出语句2的位置为止,【作用域 1 】和【作用域 2】分别定义了一个 a :
int a=1 ;
int a=2 ;
根据就近原则,使用最内层作用域的 a ,【作用域 2】里面的 a ,输出 2 ;

3)在输出语句3的位置为止,【作用域 1 】【作用域 2】和【作用域 3】分别定义了一个 a :
int a=1 ;
int a=2 ;
int a=3 ;
根据就近原则,使用最内层作用域的 a ,【作用域 3】里面的 a ,输出 3 ;

同理可以分析输出语句4。

这就是为什么规定“所有用到的变量要先定义后使用”的原因之一吧。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-14
C/C++可以用来开发系统软件 系统底层哪怕错一个字节 也会引起系统崩溃 这样可方便编译器进行类型检查 防止出错
第2个回答  2012-03-14
内存的使用方法就是“先申请后使用”。在定义变量的过程中会为你的变量分配内存
第3个回答  2012-03-14
比如函数里面的变量,必须要先定义了,编译器才能为你分配足够的栈空间存放这些变量以备后续使用。
第4个回答  2012-03-14
就好像你开车(车是没油的),你是先加上油再开呢还是开完了再加油