64,682
社区成员
发帖
与我相关
我的任务
分享
//错误
goto next;
int a=0;
next:a=2;
cout<<a<<endl;
//成功
goto next;
int a;
next:a=2;
cout<<a<<endl;
switch(2)
{case 1:int a=2;break;
case 2: a=3;break;}
a的作用域是从定义开始到},}结束前它会析构,这样解释不就没问题吗?[/quote]
那是我记错了,请看我的19L,里面解释了。switch(2)
{case 1:int a=2;break;
case 2: a=3;break;}
a的作用域是从定义开始到},}结束前它会析构,这样解释不就没问题吗?[/quote]
晕倒,a的定义都被你跳过了,还怎么构造?如果a的定义没有被跳过即int a=2被执行了,那case 1要来何用?[/quote]照你这么说。switch(2)
{case 1:int a;break;
case 2:a=2;break;}
不能用了?[/quote]
switch(2)
{case 1:int a=1;break;//加上初始化确实不能用
case 2:a=2;break;}[/quote]
实测下面代码也不能用:
#include <iostream>
using namespace std;
class A
{
public:
A(){};
A(int a){};
};
int _tmain(int argc, _TCHAR* argv[])
{
switch(2)
{case 1:A a ;break;//自定义的类,也无法这样子用
case 2:a=2;break;}
}[/quote]这个和string类似,用书上的话说就是存在隐式初始化。就是搞不清为什么能跳过定义,不能跳过定义和初始化switch(2)
{case 1:int a=2;break;
case 2: a=3;break;}
a的作用域是从定义开始到},}结束前它会析构,这样解释不就没问题吗?[/quote]
晕倒,a的定义都被你跳过了,还怎么构造?如果a的定义没有被跳过即int a=2被执行了,那case 1要来何用?[/quote]照你这么说。switch(2)
{case 1:int a;break;
case 2:a=2;break;}
不能用了?[/quote]
switch(2)
{case 1:int a=1;break;//加上初始化确实不能用
case 2:a=2;break;}[/quote]
实测下面代码也不能用:
#include <iostream>
using namespace std;
class A
{
public:
A(){};
A(int a){};
};
int _tmain(int argc, _TCHAR* argv[])
{
switch(2)
{case 1:A a ;break;//自定义的类,也无法这样子用
case 2:a=2;break;}
}switch(2)
{case 1:int a=2;break;
case 2: a=3;break;}
a的作用域是从定义开始到},}结束前它会析构,这样解释不就没问题吗?[/quote]
晕倒,a的定义都被你跳过了,还怎么构造?如果a的定义没有被跳过即int a=2被执行了,那case 1要来何用?[/quote]照你这么说。switch(2)
{case 1:int a;break;
case 2:a=2;break;}
不能用了?[/quote]
switch(2)
{case 1:int a=1;break;//加上初始化确实不能用
case 2:a=2;break;}switch(2)
{case 1:int a=2;break;
case 2: a=3;break;}
a的作用域是从定义开始到},}结束前它会析构,这样解释不就没问题吗?[/quote]
晕倒,a的定义都被你跳过了,还怎么构造?如果a的定义没有被跳过即int a=2被执行了,那case 1要来何用?[/quote]照你这么说。switch(2)
{case 1:int a;break;
case 2:a=2;break;}
不能用了?
int a;
a = 2;
// 003113BE mov dword ptr [a],2
int a = 0;
// 00C613BE mov dword ptr [a],0
a = 2;
// 00C613C5 mov dword ptr [a],2
int a;
a = 2;
// 003113BE mov dword ptr [a],2
[/quote]
更正一下:前面一句说得不对,请忽略。