从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
随机推荐
- 转 tcp协议里rst字段讲解
TCP协议的原理来谈谈rst复位攻击 http://russelltao.iteye.com/blog/1405349 几种TCP连接中出现RST的情况 https://blog.csdn.net/c ...
- HDU 1298 T9【字典树增加||查询】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1298 T9 Time Limit: 2000/1000 MS (Java/Others) Memo ...
- (第六场)Heritage of skywalkert 【玄学】
题目链接:https://www.nowcoder.com/acm/contest/144/J 标题:J.Heritage of skywalkert | 时间限制:1 秒 | 内存限制:256M s ...
- LOJ 2172 「FJOI2016」所有公共子序列问题——序列自动机
题目:https://loj.ac/problem/2172 在两个序列自动机上同时走,这样暴搜. 先走字典序小的字符,一边搜一边输出,就是按字典序排序的. 方案数很多,需要高精度?空间很小,要压位. ...
- Markdown黑色背景代码高亮
因为我默认的不是Markdown...这里分享给用Markdown的小伙伴吧. /* 使用了Monokai Sublime的黑色主题皮肤,但是还存在样式冲突,需要自己修改 这个样式只适合使用maked ...
- Android学习笔记_30_常用控件使用
一.状态栏通知(Notification): 如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息.发送消息的代码如下: public void sendNotice(View v){ int ic ...
- NDK下载地址
官方下载地址 http://developer.android.com/ndk/downloads/index.html 没有提供旧版下载链接,只能修改链接方式下载 http://dl.google. ...
- webpack——安装报错及解决办法
①先删除 删除全局webpack-cli webpack4.x开始官方文档是说要安装cli所以如果的在用4.+就需要卸载cli npm uninstall -g webpack-cli # 注释给我这 ...
- Java基础——数据结构总结
目的 : 加强类与对象的内存分配理解,加强操作能力.理解数据结构. 结构 : 数据元素之间的关系. 数据结构 : 带有结构的数据对象. 线性结构: 各数据元素之间的逻辑以用一个线性序列简单的表达出现. ...
- LINUX日志的错误等级
LINUX日志的错误等级 - CSDN博客 https://blog.csdn.net/solmyr_biti/article/details/50634533讯息等级 系统将讯息分为七个主要的等级, ...