如何在设置BOOL值的时候设置ios bool 默认值值为YES

最近在调项目的时候遇到一个 bug ,debug 版本调试的时候是没错的,但是 release 版就不对了。跟了代码之后发现有一个 bool 变量没有初始化,debug 版本中总是 true ,release 版都是 false。一般来说,类的的成员变量的默认值是什么?debug 版和 release 版的默认值是不同的吗?以后遇到 debug 版和 release 版表现不同的 bug 就比较好定位了。
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
可以先了解一下 debug和release的区别
据我所知,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc,而release的赋值近似于随机值。
类的成员变量默认值,应该与普通变量默认值的处理是类似的,要看它是放在哪个段里面的了,已初始化的分配在.data段,未初始化的分配在.bss段(程序加载时清0),函数局部变量则为随机值了。
对于这个问题,我在VS2008上面做了一个实验。示例代码如下:
#include &iostream&int main(){
cout && temp &&
getchar();
return 0;}
在Debug环境下单步调试,执行第一行之后,监视变量temp,结果如下:
从图中可以看出,temp初始默认值是true,地址是0x0013fe0f。查看该内存地址,结果如下:
从图中可以看出,地址0x0013fe0f开始的一个字节存放的值是0xcc。经过多次实验,发现各种基本类型的初始空间都是被初始化为0xcc的。所以一般在Debug环境下,程序申请的内存空间如果没有初始化的,会被编译器默认设置为0xcc的初始值。
但是继续单步执行第二行,弹出警告对话框。具体信息如下:
从对话框中可以看出,提示信息是变量temp没有初始化就使用了。然后点击继续,程序输出结果,信息如下:
从图中可以看出,显示的是204,也就是16进制的0xcc。说明temp初始值确实是0xcc,而且从上述过程中也可以看出,系统会提示没有被初始化。
在Release环境下单步调试,执行第一行之后,同样监视temp,结果如下:
从图中可以看出,初始值也是true,地址是0x001ffa8c。查看内存地址,结果如下:
从图中可以看出,地址0x001ffa8c开始的第一个字节放的值是0xf0。经过多次试验,发现初始值是随机的,没有被统一规定。所以在Release环境下,变量内存的初始值是随机的。
继续单步执行第二行,没有弹出警告对话框。最后显示的结果如下:
从图中可以看出,显示的是240,也就是16进制的0xF0,与上述在内存地址中观察的一样。
综上可以看出,在Debug环境下,变量的内存地址空间被编译器默认用0xcc填充了。而在Release环境下,变量的内存地址空间被编译器用随机值填充了。
研究了这么多,其实还是要给出一条建议:在定义变量的同时,给出一个初始值,而不要让编译器默认填充。这样既方便调试,也不会因为Debug或者Release环境的不同而不同。默认填充会有许多的不确定性,不同的编译器也会不同,会引入许多隐含的Bug。
这个问题我也遇到过, 主要还是编译器在debug和release时提供的初始化不同, 既然c++没有规定这种行为, 我们就不能假设他会发生某种行为, 编程的好习惯是把变量都初始化到正确的值, 有些东西是不应该来纠结的, c++只是一门语言, 我们应该正确的对待他
强烈建议:声明变量的时候初始化~这是一个好的编程习惯~
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (16791) 次Pages: 1/3
主题 : 请问如何在设置BOOL值的时候设置默认值为YES?
级别: 侠客
可可豆: 743 CB
威望: 743 点
在线时间: 266(时)
发自: Web Page
来源于&&分类
请问如何在设置BOOL值的时候设置默认值为YES?&&&
  BOOL success;这样声明,success的默认值是NO,怎么样在声明的时候就把它设置成YES呢?还望赐教
级别: 侠客
可可豆: 21 CB
威望: 291 点
在线时间: 294(时)
发自: Web Page
试一试不就知道咯?!
级别: 精灵王
可可豆: 4150 CB
威望: 4150 点
在线时间: 535(时)
发自: Web Page
BOOL success = YES;
无私的分享知识,才能让自己更进步,也正因如此你才能得到更多知识!!
级别: 侠客
可可豆: 743 CB
威望: 743 点
在线时间: 266(时)
发自: Web Page
回 2楼(justlook911) 的帖子
不允许这样写啊
级别: 侠客
可可豆: 236 CB
威望: 236 点
在线时间: 76(时)
发自: Web Page
试试重写init方法,然后在init方法里给BOOL赋值~
级别: 侠客
可可豆: 743 CB
威望: 743 点
在线时间: 266(时)
发自: Web Page
回 4楼(灬霖zi) 的帖子
不可以声明的时候赋值吗?因为没有init,定义宏的文件
级别: 新手上路
可可豆: 27 CB
威望: 27 点
在线时间: 2(时)
发自: Web Page
回 2楼(justlook911) 的帖子
不可以这样!
级别: 侠客
可可豆: 492 CB
威望: 492 点
在线时间: 103(时)
发自: Web Page
BOOL success = YES; 这样不允许???
级别: 新手上路
UID: 161128
可可豆: 214 CB
威望: 113 点
在线时间: 178(时)
发自: Web Page
换个角度,你可以把在后面用success的时候使用“!success”反向来使用这个BOOL,这样就把no变为yes啦~~~
级别: 精灵王
可可豆: 1082 CB
威望: 982 点
在线时间: 137(时)
发自: Web Page
回 8楼(美奇) 的帖子
糟糕的代码就是这样产生的...
Pages: 1/3
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版}

我要回帖

更多关于 golang bool 默认值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信