goto 后面使用c++数据类型

太乙 2009-11-25 10:55:50

#include <string>
using namespace std;
int main()
{
goto YES;
string s;
YES:
return 0;
}

如果将string改为char或者int,均可以编译通过
但是使用string、set、map等,编译不过:g++ main.cpp -o run
main.cpp: In function `int main()':
main.cpp:7: error: jump to label `YES'
main.cpp:5: error: from here
main.cpp:6: error: crosses initialization of `std::string s'


编译器:
gcc version 3.4.6 20060404 (Red Hat 3.4.6-3)


...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lylm 2009-11-25
  • 打赏
  • 举报
回复
main.cpp:6: error: crosses initialization of `std::string s'
>>gcc提示的也很清楚了,在vs2008也会提示:initialization of 's' is skipped by 'goto YES'
mengde007 2009-11-25
  • 打赏
  • 举报
回复
problc 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 akirya 的回复:]
因为goto跳过了s的构造函数,却没跳过s的析构函数,所以给你错误。
[/Quote]
学习
  • 打赏
  • 举报
回复
因为goto跳过了s的构造函数,却没跳过s的析构函数,所以给你错误。
mengde007 2009-11-25
  • 打赏
  • 举报
回复

#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
goto YES;
cout<<s;
YES:
return 0;
}
//如果是这样的话,就不会错了;看来还是s初始化的问题;
DLevel 2009-11-25
  • 打赏
  • 举报
回复
go to 很好用,但是,当遇到类等有析构函数或者内存泄露问题是要慎重了
DLevel 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 akirya 的回复:]
因为goto跳过了s的构造函数,却没跳过s的析构函数,所以给你错误。
[/Quote]
正解,正如C++primer所云。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧