从C到C++ (1)
从C到C++
一、 bool类型
bool取值false和true,是0和1的区别; false可以代表0,但true有很多种,并非只有1。
二、 const限定符
- 常量在定义后就不能修改,所以定义时必须初始化。
- 在一个文件全局作用域中定义非const变量,在另外的文件中做extern声明,就可以使用这个变量。但是,对于一个文件全局作用域中定义的const变量,在另外的文件中做extern声明,是不能被访问的:
//文件一
const int counter=func();
//文件二
extern const int counter;
++counter; //这里变量声明后不可以用
这里const变量要想能够被其他的文件访问,必须显示的指定它为extern:
//文件一
extern const int counter=func();
//文件二
extern const int counter;
++counter; //这里变量声明后可以用
3. const int *p ; // *p为常量,经由*p不能更改指针所指向的内容。
int * const p; // p为常量,不能更改p指向,可以更改p所指向的内容。
4. const 与 #define区别
1) const定义的常量有类型,而#define定义的常量没有类型,编译可对前者做类型安全检查,而后者仅仅是做简单替换。
2) const定义的常量在编译时分配内存,而#define定义的常量在预编译时进行替换,不分配内存,程序加载到内存时才分配内存。
3) 作用域不同,const定义的常变量的作用域为该变量的作用域范围。而#define定义的常量作用域为它的定义点到程序结束,当然也可以在某个地方用#undef取消。
定义常量还可以用enum。高层编译尽量用enum、const替换#define定义常量。底层编译#define有很大的灵活性。
三、 结构体内存对齐
- 为什么要对齐:
数据存在与对齐的内存地址中CPU读取数据的速度大大提升
2. 如何对齐:
4) 第一个数据成员对齐至偏移值为0的地方
5) 接下来的数据成员对齐(start)至对齐模数的整数倍。
对齐模数 = 数据成员的大小与pragma pack(n) (对齐值gcc(4) vc(8))的较小值 注意gcc对齐数的取值是0 1 2 4
6) 每个成员都有自己的对齐数 最总整个结构体对齐至成员最大对齐数的倍数。
例:
typedef struct test
{
char ch1;//start 0 size=1 end=1
double d;//mix(8:8)=8 -> start 8(对齐至8的整数倍) size=8 end=16
char ch2;//mix(1:8)=1 -> start 16(对齐至1的整数倍) size=1 end=17
}test_t; //last 17:8x end=24 整个结构体大小为8的倍数即24
随机推荐
- C语言 字符串的声明与使用
// 字符串的定义和初始化 void test() { // "mj" char s[] = {'m', 'j', '\0'}; // 字符串"mj" ] = ...
- Django:web框架本质
一,web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 1,自定义web框架 impo ...
- 【[NOI2009]植物大战僵尸】
题目 我太\(zz\)了 有一个非常显然的问题就是一个植物显然能保护同一行上比它更靠后的植物,因为显然得先干掉更靠前的植物 首先可以看出来这是一个经典的最大权闭合子图的模型,于是去套最小割 发现植物的 ...
- 商城管理系统项目(前台+后台+管理员+用户+html+jsp)
管理员后台 用户前台 如果下载项目报错,加包即可(包已经打包放在下载地址) 数据库:mysql drop database shoppingmall; create database shopping ...
- 重写viewWillAppear 和 viewWillDisAppear时[super viewWillAppear] 和 [super viewWillDisappear]的调用位置
参考网址:https://stackoverflow.com/questions/3906704/when-should-i-call-super 在写代码的过程中如果重写了viewWillAppea ...
- 固定导航栏demo
代码如下 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...
- 使用两个嵌套的for循坏探测2-100的所有素数
只能被1和本身整除的整数才叫做素数 public class prime { public static void main(String[] args) { ; i <= ; i++) { ; ...
- linux下ssh/sftp配置和权限设置
基于 ssh 的 sftp 服务相比 ftp 有更好的安全性(非明文帐号密码传输)和方便的权限管理(限制用户的活动目录). 1.开通 sftp 帐号,使用户只能 sftp 操作文件, 而不能 ssh ...
- 搭建简单的hadoop集群(译文)
本文翻译翻译自http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/ClusterSetup.html 具体的实 ...
- python学习之路2(程序的控制结构)
1.程序的分支结构 1.1 单分支 if <条件>: 例:guess = eval(input()) <语句块> ...