问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++ 未定义行为是什么意思7

发布网友 发布时间:2024-02-22 17:38

我来回答

2个回答

热心网友 时间:2024-04-09 04:01

就是说,你用到了某一个变量,但是没有定义,这样的行为一般都是错误的,编译器即使通过,也很有可能发生错误
例如:
cout<<i<<endl;
i就是没有定义的

或者说“=”,默认是基本数据类型的赋值,但是用在其他数据类型的话,首先要重载(即先定义),否则即使能赋值,结果很有可能也是错的
例如:定义一个book类型的数据,就不能用如下代码
book a;
book b;
a=b;

热心网友 时间:2024-04-09 03:59

使用未定义的变量只是所有未定义行为中最简单的一种,是编译器特别容易发现的一个错误。引用楼主说的一句话:

未定义行为源于编译器不能检测到的程序错误或太麻烦以致无法检测到的错误。

如果未定义行为真的只是使用了未定义的变量的值,怎么可能会有不能检测到的情况。

制定C++语言标准的那些人对于一些情况没有定义应该按照什么样的顺序去进行计算,那么实现编译器的那伙人在处理这种问题上就会存在分歧,如何处理都不算错,那么对于使用编译器的人来说无法预估一个语句的执行顺序,自然就有可能会存在不同的执行结果。

int i = 0; i = i++;

对于上面两句代码,执行后i的值是多少,先赋值后自增结果为1,先自增后赋值的情况下,因为赋值的是自增前的值,所以结果为0,我在gcc和VS2012中测试的结果确实是不同的。

假设你期望上面这段语句的执行结果为1,你在你自己的环境里测试结果也确实是1,那么你认为这段语句是正确的,并且继续使用了这段代码,以后换了一个环境就可能会出错。这就叫做“依赖了未定义的行为,即使程序能运行也是巧合”。实际上我们应该杜绝依赖巧合编程。

int a = g() * h() + i() * j();

这是第二个例子,因为我并没有说明这几个函数内部是否使用或改变了全局变量,如果确实使用了那这就又是一个典型的未定义行为。

因为在制定C++语言标准的时候,同样没有定义这种语句的执行顺序,你不知道这四个函数的调用顺序是怎样的,一般来讲问题不大,但确实有极低的概率会造成未定义行为。

int arr[10], i;
for (i = 0; i<=10; ++i)
    arr[i] = 0;

永远不要读写数组以外的空间,就比如上面这段代码,由于把<写成了<=,i是有可能等于10的,那么就相当于给数组外的空间赋值了。

再看上面的定义,i正好在arr[10]的后面,如果i的地址正好和arr[10]紧挨着呢,那么上面的这段代码就成了死循环。

C++标准未定义某些行为的执行细节,是为了让不同的编译器厂商放开手脚,尽情优化,所以造成了不同编译器的处理细节不同。

但是对于我们来讲则应该杜绝使用未定义行为,不要依赖巧合编程。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
哪些女人不值得男人珍惜? 潘集区第一小学优秀学生 优秀干部登记表 ...没想到洗几次更大了 有什么办法能让他变小点吗 纯棉的 济南哪里卖手机放心,便宜 飞利浦手机在烟台的售后服务在哪里 ? 济南哪里有飞利浦专卖店 微信群内发红包,怎么会让陌生人就领取了???为什么?? 我的戴尔笔记本电脑 无意中出现飞行模式。关闭不了。求大家帮忙_百度知 ... 什么是受伤庄股 C语言中未定义行为的i=i+++i+++i++11 女人生气对男人说别走的太近,男人说女人你高兴就好? ...他说不知道说什么了,你高兴就好 是什么意思啊 男人喜欢说你喜欢就好和你高兴就好是什么意思 你住在几层 英语 为什么我的固态硬盘这么慢? 猪杂粥怎么做才没有腥味? 怎么查询淘宝订单详情呢? GTA5玩第一章抢劫出来跟警察打完要开车走就卡住,然后就自动退出... 2012伦敦奥运会开幕式憨豆与伦敦交响乐团共同演奏的乐曲是? 大道之行也天下为公,最顶尖乐团和众位演奏家共谱《大道华章》!_百度... 低速运城到垣曲经过横水吗? 日光灯省电吗 眼睛肿的时间长了,原来的双眼皮会不会变成单眼皮? ...4K也对齐了,就是慢,感觉比我的机械硬盘还慢 污水处理是哪年的什么英语考试作文 大幸福树叶子全掉了怎么回事 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 结婚喜床吉时铺好后还能换吗 C++ 如何判断哪些是未定义行为1 为什么C&#47;C++语言会有未定义行为 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 香格里拉开拓异境女主是谁 c++问题,请问这个未定义行为的表达式怎么算? int a=... ...在细胞中承担的功能也是多种多样的。下列不属于动植物体内蛋白质功能... 钢筋怎样搭接 手机号1 24 手机号24小时内绑定了两个被限制 请问什么时候才能重 ... 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 蛋白质的结构具有多样性,下列各项与蛋白质多样性无关的是( )A.氨基酸... 下列各项与蛋白质分子结构多样性无关的是( )A.氨基酸的数目、种类和排列... 上海为什么没有中式合院 事业单位招考中有淋巴瘤病史会被拒绝录取吗? 求解!!!这道题答案为什么是22!!!! ...我想从新打发泡 下面应该留多大空隙 窗户会下沉吗 人体的肌肉主要是由蛋白质构成的,但骨骼肌、心肌、平滑肌... 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 比较伤感一点的音乐,多推荐几首,民族乐器独奏也可。为南京大屠杀... 蛋白质结构的多种多样决定了其功能的多种多样吗 如何创建一个整数数组,长度为5?