社区
C++ 语言
帖子详情
goto不能跳过抽象数据类型
buleideli
2008-03-25 06:34:03
//example1
if(.......)
goto END;
.....
int a;
.....
END: ;
这个OK
//example1
if(.......)
goto END;
.....
myClass a;//myClass 一个类
.....
END: ;
有错
、、、、、、、、、、、、、、、、、、、、、、、、、、、
怎么回事
...全文
117
17
打赏
收藏
goto不能跳过抽象数据类型
//example1 if(.......) goto END; ..... int a; ..... END: ; 这个OK //example1 if(.......) goto END; ..... myClass a;//myClass 一个类 ..... END: ; 有错 、、、、、、、、、、、、、、、、、、、、、、、、、、、 怎么回事
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
silendream
2008-03-27
打赏
举报
回复
学习~~
疯石头
2008-03-27
打赏
举报
回复
//example1
if(.......)
goto END;
{
.....
myClass a;//myClass 一个类
.....
}
END: ;
linfengc
2008-03-26
打赏
举报
回复
[Quote=引用 5 楼 sun3411 的回复:]
怎么我的不出问题呢 VC6sp6.
[/Quote]
VC6很sb的,你一个for(int i = 0;;)
再来个for(int i = 0;;)
就报重定义。
作用域不很清晰
taodm
2008-03-26
打赏
举报
回复
楼主,你需要看《重构》一书,带跳出的深度循环是应该禁止的行为。
Supper_Jerry
2008-03-26
打赏
举报
回复
goto资源释放的时候很需要!!
yichuankun
2008-03-26
打赏
举报
回复
我觉得适当的使用还是可以的,大家不要一棍子打死,goto本身没错,错的是那些乱用的人
spark603
2008-03-26
打赏
举报
回复
都说不应该用:goto, 这原因倒底是什么.
工作中,我也想用,但怕被骂.
buleideli
2008-03-26
打赏
举报
回复
哦,exception不是异常处理吗,跳出深度循环用它??有例子吗?
学习。。。。。
谢谢大家
arong1234
2008-03-25
打赏
举报
回复
深度循环也是应该避免得,现代软件工程需要你用子函数实现。如果要跳出多重循环,应该考虑exception
buleideli
2008-03-25
打赏
举报
回复
有时要用咯,特别是跳出深度循环
arong1234
2008-03-25
打赏
举报
回复
大家不是都知道不应该用goto么:)关心这个干嘛?
buleideli
2008-03-25
打赏
举报
回复
cunsh 说得没错,谢谢大家!!!!!!!
记得函数作用域就是这样的,这作用域只与goto有关
sun3411
2008-03-25
打赏
举报
回复
怎么我的不出问题呢 VC6sp6.
ttkk_2007
2008-03-25
打赏
举报
回复
像这种定义,你都要加上{},将它放在一个块里,switch case也一样
cunsh
2008-03-25
打赏
举报
回复
if(.......)
goto END;
.....
myClass a; .....
END: ;
//这里要调用 a 的构造函数. 如果被goto过去的话构造函数就不能调用了. 假如你在 END 之后又使用 a 的话那就是使用未初始化的对象了.
//所以编译器阻止了它. 类似的还有 switch 的 case 也会出现这种问题.
//如果你这里的 a 只在 END 之前使用可以用下边的办法:
if(.......)
goto END;
.....
{ //放到一个块中.
myClass a; .....
}
END: ;
yichuankun
2008-03-25
打赏
举报
回复
不好意思,我搞错了,是不能,呵呵。关注
yichuankun
2008-03-25
打赏
举报
回复
你用的是什么编译器啊?我在VC上可以啊
相关推荐
goto
不能
跳过
构造函数
class A { public: A(){} ~A(){} }; int main() {
goto
Flag1; int i; Flag1: i=2;
goto
Flag2; A a; Flag2: i++; return 0; } 第一个
goto
跳到Flag1是没有问题的,但是第二个
goto
跳到Flag2是不行的。C++标准定义
goto
不能
跳过
构造函数的执行。
goto
不能
跳过
构造函数
class A{ public: A(){} ~A(){}};int main(){
goto
Flag1; int i; Flag1: i=2;
goto
Flag2; A a; Flag2: i++; return 0;}第一个
goto
跳到Flag1是没有问题的,但是第二个
goto
跳到Flag2是不行的。C++标准定义
goto
不能
跳过
构造函数的执行。在vs中编译上面代码会有
4.7
goto
语句
自从提倡结构化设计以来,
goto
就成了有争议的语句。首先,由于
goto
语句可以 灵活跳转,如果不加限制,它的确会破坏结构化设计风格。其次,
goto
语句经常带来错 误或隐患。它可能
跳过
了某些对象的构造、变量的初始化、重要的计算等语句,例如:
goto
state; String s1, s2; // 被
goto
跳过
int sum = 0; // 被
goto
跳过
⋯ stat
趣谈
goto
语句
自从提倡结构化设计以来,
goto
就成了有争议的语句。首先,由于
goto
语句可以灵活跳转,如果不加限制,它的确会破坏结构化设计风格。其次,
goto
语句经常带来错误或隐患。它可能
跳过
了某些对象的构造、变量的初始化、重要的计算等语句,例如:
goto
state; String s1, s2; // 被
goto
跳过
int sum = 0; // 被
goto
跳过
⋯ar state:
goto
的使用注意点
使用
goto
不能
跳过
变量得初始化; 例子: ……
goto
test; int i; string str; test: { …… } …… 为什么这里通不过编译呢?把string str;这一句拿到
goto
之前就可以了? 为什么后面的int i;这一句不需要拿到
goto
之前呢? 解答: 在c++ Primer中倒是提到,
goto
不能
向前
跳过
变量定义语句,给出的理由是可能
发帖
C++ 语言
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
6.3w+
社区成员
25.0w+
社区内容
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
帖子事件
创建了帖子
2008-03-25 06:34
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下