从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
随机推荐
- Jmeter入门12 __time函数 jmeter获取当前系统时间
有的接口要传递当前的日期或时间,可以用__time()函数获取当前时间 ${__time()} 当前时间到计算机元年的毫秒数 ${__time(时间格式)} 以预定的格式显示当前时间 请求示例: ...
- 【转】jQuery源码分析-03构造jQuery对象-源码结构和核心函数
作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com 毕竟是边读边写,不对的地方请告诉我,多多交流共同进步.本章还未写完,完了会提交PDF. 前记: 想系 ...
- HDU 1711 Number Sequence 【KMP应用 求成功匹配子串的最小下标】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/O ...
- 总结的MR中连接操作
1 reduce side join在map端加上标记, 在reduce容器保存,然后作笛卡尔积缺点: 有可能oom 2 map side join 2.1 利用内存和分布式缓存,也有oom风险 2 ...
- tomcate8配置多个二级域名问题解决根目录空白2017年12月9日
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDepl ...
- 关于In-App Purchase(内购)的注意事项
前言:关于In-App Purchase(内购)的注意事项 一点注意事项: 内购应该有游客身份的购买选项,不然可能被拒,前一段时间我这边一直是因为没有游客身份购买被拒. 在验证内购结果的时候要注意使用 ...
- xcode7--iOS开发---将app打包发布至app store
时隔3个月再次接触应用打包,又是一顿折腾 说说这次的感受吧: 变得是打包时间减少到4小时(其中大部分时间还是xcode7或者是iOS9的原因),不变的是还是一如既往的坑!! 好了,废话不多说,下面讲讲 ...
- 解决WordPress设置错误的url网站不能访问的问题
通过WordPress后台首选项更改了网站url地址之后,网站就会出现访问不了的情况,一般来说,网站后台也登陆不上去了,我从网上寻找到了四种方法,这四种方法前三种都是需要登陆到后台的,但实际上出错后, ...
- 虚拟内存设置(解决linux内存不够情况)
一. 虚拟内存介绍 背景介绍 Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级.所以,程序和数据如果在内存的话,会有非常快的读写速度.但是,内存的造价是要高于 ...
- JS学习- ES6 async await使用
async 函数是什么?一句话,它就是 Generator 函数的语法糖. 使用场景常常会遇到,请求完一个接口,拿完值再去请求另外一个接口,我们之前回调callback函数处理,如果很多的情况下,看起 ...