科勒马桶盖拆卸老式:一个关于“构造对象顺序”的问题

来源:百度文库 编辑:高校问答 时间:2024/05/11 04:02:52
我在一本C++教程上“构造对象顺序”这一节中,看到这样一个例子:
#include <iostream.h>
void main()
{
int m=5;
if(m==5)
goto abc;

int n;
abc:
cout<<"m="<<m<<",n="<<n<<endl;
}
程序执行结果:m=5,n=0
书中解释是:程序中,并不是根据运行顺序来决定变量定义的顺序,而是所有的变量和对象都在函数开始执行时统一定义。统一定义的顺序正是这些变量和对象在函数中出现的顺序。我把程序改成
#include <iostream.h>
void main()
{
int m=5;
if(m==5)
cout<<"m="<<m<<",n="<<n<<endl;
else
int n;
}
系统出现未定义德错误,既然变量是在函数之前就定义了,为什么还会出现这样的错误

你后面定义的int n是属于else管辖的代码段的局部变量,和int m;不属于同一级的代码段,不会统一定义。只有当程序执行到else时才会定义。

。。。。。。
cout<<"m="<<m<<",n="<<n<<endl;
else
int n;
。。。。。。
你n不是放到后面去了吗,这样是算没定义的