#2.bool类型和 const

#2.bool类型和const类型

bool类型

const限定符

const与#define

结构体内存对齐

bool类型

逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC++中为1个字节。

声明方式:   bool result;

result=true;

可以当作整数用(true一般为1,false为0)

把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false

const限定符

用const给字面常量起个名字(标识符),这个标识符就称为标识符常量;(因为标识符常量的声明和使用形式很像变量,所以也称常变量)

定义的一般形式:

const 数据类型常量名=常量值;

数据类型const 常量名=常量值;

例如:

const float  PI=3.14159f;

注意事项:

a.常变量在定义时必须初始化;

b.常变量初始化之后,不允许再被赋值;

const与#define

const定义的常量与#define定义的符号常量的区别:

a. const定义的常量有类型,而#define定义的没有类型,编译可以对前者进行类型安全检查,而后者仅仅只是做简单替换。

b. const定义的常量在编译时分配内存,而#define定义的常量是在预编译时进行替换,不分配内存。

c.作用域不同,const定义的常变量的作用域为该变量的作用域范围,而#define定义的常量作用域为它的定义点到程序结束,当然也可以在某个地方用#undef取消。

注意事项:

#define定义的常量,容易产生副作用。

引用Effective C++ 3rd的一个例子:

#defineCALL_WITH_MAX(a,b) f((a) > (b) ? (a) : (b))

int a =5;

int b =0;

CALL_WITH_MAX(++a,b);       //a被累加二次

CALL_WITH_MAX(++a,b+10);         //a被累加一次

在这里,调用f之前,a的递增次数竟然取决于“它被拿来和谁比较”

故,定义常量还可以用enum,尽量用const、enum替换#define定义常量。

结构体内存对齐

什么是内存对齐

编译器为每个“数据单元”按排在某个合适的位置上;C、C++语言非常灵活,它允许你干涉“内存对齐”

为什么要对齐

程序性能的原因:在对齐的地址上访问数据快。

如何对齐

a.第一个数据成员放在offset为0的位置

b.其它成员对齐至min{sizeof(member),#pragma pack所指定的值}的整数倍。

c.整个结构体也要对齐,结构体总大小对齐至各个成员中最大对齐数的整数倍。

#2.bool类型和 const,布布扣,bubuko.com

时间: 2024-12-26 06:18:29

#2.bool类型和 const的相关文章

c# bool类型和int类型的互转

项目过程中,会有model的一些属性字段为'是'或'否' 数据库字段一半定义为int,值则是0或1 数据库model转实体类的时候,bool和int可以直接相互转换 false强转int 值就是0 true 强转int 值就是1 1 var a = true; 2 Console.WriteLine(Convert.ToInt32(a)); 3 var b = false; 4 Console.WriteLine(Convert.ToInt32(a)); 原文地址:https://www.cnb

c++ ---- 引用类型和const

c++  引用类型 引用符号 & 格式:数据类型 & 引用名 = 实名: 基本数据类型引用: int a = 10; int &b = a; (相当于给a取了一个别名b) 指针类型引用: int a = 10; int *p = &a; int * &q = p; (相当于给指针p取了一个别名q) 结构体类型:typedef struct{int x, int y}coor;  coor c1; coor & c2 = c1; (相当于给结构体类型c1取了别

MySql数据类型和Java数据类型对应一览

类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N CHAR java.lang.String 1   BLOB L+N BLOB java.lang.byte[] -4   TEXT 65535 VARCHAR java.lang.String -1               INTEGER 4 INTEGER UNSIGNED java.la

C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast(dynamic_cast还支持交叉转换,const_cast将一个类的const、volatile以及__unaligned属性去掉)

在C++中,存在类型转换,通常意味着存在缺陷(并非绝对).所以,对于类型转换,有如下几个原则:(1)尽量避免类型转换,包括隐式的类型转换(2)如果需要类型转换,尽量使用显式的类型转换,在编译期间转换(3)避免使用reinterpret_cast和老式的强制类型转换操作符通常,隐式的类型转换会导致警告,需要重视这些警告,并使用显式的类型转换代替,例如static_cast代替一些算术类型转换. 在C++中,对象的类型通常有如下几种:(一)内置类型,如int ,bool ,枚举类型等(二)自定义类型

返回类型和return语句

return语句终止当前正在执行的函数并将控制权返回到调用该函数的地方.return语句有两种形式: return; return expression; 无返回值函数 没有返回值的return语句只能用在返回类型是void的函数中.返回void的函数不要求非得有return语句,因为在这类函数的最后一句后面会隐含地执行return. 通常情况下,void函数如果想在它的中间位置提前退出,可以使用return语句.return的这种用法有点类似于我们用break语句退出循环. 一个返回类型是vo

【足迹C++ primer】11、返回类型和return语句(1)

返回类型和return语句 1.返回数组指针 由于数组不能被拷贝,所以函数不能返回数组. 但是函数可以返回数组的指针或引用. typedef int arrT[10]; using arrT=int[10];<span style="white-space:pre"> </span>//arrT的等价声明 arrT* func(int i);<span style="white-space:pre"> </span>/

Java数据类型和MySql数据类型对应一览

类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N CHAR java.lang.String 1   BLOB L+N BLOB java.lang.byte[] -4   TEXT 65535 VARCHAR java.lang.String -1               INTEGER 4 INTEGER UNSIGNED java.la

Sql Server中的数据类型和Mysql中的数据类型的对应关系(转)

Sql Server中的数据类型和Mysql中的数据类型的对应关系(转):https://blog.csdn.net/lilong329329/article/details/78899477 一.SQL SERVER与MySQL数据存储的差异 1.SQL SERVER中的datetime,保留到微秒(秒后小数点3位),而mysql仅保留到秒,转换后是否会影响业务,如果影响,需要新增一个字段专门来存储微秒或者毫秒,虽然mysql中没有时间数据类型的精度到达微秒或者毫秒,但是mysql提供对微秒的

类的const成员

类的const成员包括const数据成员和const成员函数: 1.const数据成员: 和普通的const变量一样,定义时初始化,且不能修改 2.const成员函数: const成员函数只能访问其他的const成员函数,而不能访问非const成员函数 const可以修饰static数据成员,在定义时初始化,但仍要在类外进行声明 const成员函数不能修改类的对象,即不能修改数据成员,但当数据成员被mutable修饰时,可以修改 const不能修饰static成员函数,因为const表示不修改类