C++ 将布尔值更改为0或1以外的值?
我有以下代码:C++ 将布尔值更改为0或1以外的值?,c++,visual-studio-2010,visual-c++,C++,Visual Studio 2010,Visual C++,我有以下代码: #include <stdio.h> int main() { bool b; // Set b to 123 char *p = (char*)&b; *p = 123; // Check if b is considered to be true if (b == true) printf("b is true"); return 0; } #包括 int main() { 布尔b; //将
#include <stdio.h>
int main()
{
bool b;
// Set b to 123
char *p = (char*)&b;
*p = 123;
// Check if b is considered to be true
if (b == true) printf("b is true");
return 0;
}
#包括
int main()
{
布尔b;
//将b设置为123
char*p=(char*)&b;
*p=123;
//检查b是否被认为是正确的
如果(b==true)printf(“b为true”);
返回0;
}
b
不被认为是true
,因此true
的确切含义是true
等于1
< > > >编辑:< /强>忘记说我使用Visual C++。 < P> <代码>真< /代码>意味着代码> 1
但123也被认为是真的(通常是除零以外的所有整数)
如果你说if (b) printf("b is true");
您必须获得输出
b为true
true
表示1
bool b;
// Set b to 123
char *p = (char*)&b;
*p = 123;
但123也被认为是真的(通常是除零以外的所有整数)
如果你说
if (b) printf("b is true");
您必须获得输出b为真
bool b;
// Set b to 123
char *p = (char*)&b;
*p = 123;
< > C++标准中未指定“代码> BoOL < /COD>如何存储…e、 一个编译器使用一个字节,另一个编译器使用四个字节是完全合法的。此外,一个编译器可能为false
存储say0
,为true
存储所有位,以及另一个0
和1
或任何其他值。重要的是,当在布尔上下文中使用时,逻辑工作正常,并且当转换为int
时:
是int(b)
如果1
是b
,true
如果0
是b
,以及false
为bool(n)
当且仅当true
不是n
时0
bool
表示中最低内存地址处的字符:可能是一个编译器生成的代码使用四字节int
进行读取,然后只测试最低有效位或字节,根据端部的不同,可能未被*p=123
触及。类似地,编译器可能会将该值读入有符号整数寄存器,并测试其负性(当为true
时,期望值为all bits on),即使*p=123
已写入唯一或最高有效字节,也可能会失败
因此,即使没有其他因素在起作用,下面的一行可能不会报告“b是真的”
…但这项测试还有一个缺陷
- 可能从未初始化的
表示中的其他字节读取(未初始化的内存读取具有未定义的行为)bool
- 仅仅摆弄
值本身就具有“未定义的行为”;就对bool
内存的“二进制写入”而言,只有来自另一个正确初始化的bool
的完整字节对字节拷贝才能保证该bool
处于可用状态bool
false
存储say0
,为true
存储所有位,以及另一个0
和1
或任何其他值。重要的是,当在布尔上下文中使用时,逻辑工作正常,并且当转换为int
时:
是int(b)
如果1
是b
,true
如果0
是b
,以及false
为bool(n)
当且仅当true
不是n
时0
bool
表示中最低内存地址处的字符:可能是一个编译器生成的代码使用四字节int
进行读取,然后只测试最低有效位或字节,根据端部的不同,可能未被*p=123
触及。类似地,编译器可能会将该值读入有符号整数寄存器,并测试其负性(当为true
时,期望值为all bits on),即使*p=123
已写入唯一或最高有效字节,也可能会失败
因此,即使没有其他因素在起作用,下面的一行可能不会报告“b是真的”
…但这项测试还有一个缺陷
- 可能从未初始化的
表示中的其他字节读取(未初始化的内存读取具有未定义的行为)bool
- 仅仅摆弄
值本身就具有“未定义的行为”;就对bool
内存的“二进制写入”而言,只有来自另一个正确初始化的bool
的完整字节对字节拷贝才能保证该bool
处于可用状态bool
C++11说(3.9“类型”[basic.Types]):
一个对象的值表示是一组保存数据的位
类型T的值。对于普通可复制类型,值
表示是对象表示中的一组位
确定一个值,该值是
实现定义的一组值
和(3.9.1“基本类型”[基本基本类型]):
对于字符类型,对象表示的所有位都参与
在值表示中。对于无符号字符类型,所有
值表示的可能位模式表示数字。
这些要求不适用于其他类型
bool类型的值为true或false
最后,5个“表达式”[expr]表示:
如果在表达式求值期间,结果不是
文科硕士