goto语句引起的crosses initialization of XXX详解编程语言
编程语言 详解 语句 of 引起 xxx initialization goto
2023-06-13 09:11:47 时间
1. 背景
goto语句虽然目前已经不提倡使用,但是用起来还是很方便,尤其是老代码中见的比较多。
在改动有goto语句的老代码时需要特别注意,是否跳过来资源的释放、有用变量的初始化等等。
很久之前写c程序时,有些提交系统要求变量必须在函数开始地方全部申明,最近遇到了 crosses initialization of XXX 知道为什么了。就是因为有可能跳过变量的声明。
2. 代码例子
例子1:
1 #include iostream 2 class Test{ 3 public: 4 int a; 5 }; 7 int main(){ 8 Test t1; 9 std::cout "ok" std::endl; 10 goto _Lab1; 11 Test *t2 = new Test; //1 12 //Test t2; //2 13 _Lab1: 14 std::cout t2- a std::endl; //1 15 //std::cout t2.a std::endl; //2 16 return 0; 17 }
从代码中也可以看出来,
(1) 在只打开第一种情况下,“goto _Lab1”跳过来t2变量的定义,导致t2没有初始化。编译报错。
(2) 在只打开第二种情况下,由于Test类没有显示构造函数,编译器会提供无参数的默认构造函数。编译正常。执行后t2.a 是随机的int值。
例子2:
1 #include iostream 2 class Test{ 3 public: 4 Test(int _a):a(_a){}; //提供显示构造函数 5 int a; 6 }; 8 int main(){ 9 Test t1(1); 10 std::cout "ok" std::endl; 11 goto _Lab1; 12 Test t2(3); //没有执行初始化 13 _Lab1: 14 std::cout t2.a std::endl; 15 return 0; 16 }
Test类显示提供了带参数构造函数后,t2由于goto语句导致未初始化,编译失败。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/17508.html
cgojavamacphp相关文章
- 经典排序算法:希尔排序(Shell Sort)详解编程语言
- 轻松学习 JavaScript——第 1 部分:了解 let 语句详解编程语言
- DWR Server Push(服务器推技术) 实现即时聊天功能(WEB)`详解编程语言
- mybatis04–Mapper动态代理实现详解编程语言
- 小白的Python之路 day5 os,sys模块详解编程语言
- SDP(4):ScalikeJDBC- JDBC-Engine:Updating详解编程语言
- 2013-01-09 13:31 IE不支持textarea的maxlength属性,Firefox支持详解编程语言
- 分页语句详解编程语言
- excel导入导出详解编程语言
- connection holder is null 异常详解编程语言
- 将SQL语句合并为一行详解编程语言
- Java之浅克隆和深克隆详解编程语言
- 关于Java中try finally return语句的执行顺序分析详解编程语言
- 谈谈javascript中的流程控制语句详解编程语言
- Javascript基础 – js中曾经忽略的知识点详解编程语言
- java-jpa-criteriaBuilder使用入门详解编程语言
- 去掉富文本编辑器的标签详解编程语言
- SpringCloud系列七:Hystrix 熔断机制(Hystrix基本配置、服务降级、HystrixDashboard服务监控、Turbine聚合监控)详解编程语言
- 使用Hibernate 拦截执行sql语句,并输出sql语句,获取sql语句详解编程语言
- django原生SQL语句查询与前端数据传递详解编程语言
- MyBatis一次执行多条SQL语句详解编程语言
- SAP的PI日志查看工具详解编程语言
- [FI] F-65 生成预制凭证 、FBV0 过账 bapi、删除预制凭证 、取消过账详解编程语言
- 各种SAP常用表详解编程语言
- abap–如何获取sap标准表的相关的锁(lock)详解编程语言
- HTML语句判断IE浏览器版本详解编程语言