从C到C++

一、 bool类型

   bool取值false和true,是0和1的区别; false可以代表0,但true有很多种,并非只有1。

二、 const限定符

  1. 常量在定义后就不能修改,所以定义时必须初始化。
  2. 在一个文件全局作用域中定义非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有很大的灵活性。

三、 结构体内存对齐

  1. 为什么要对齐:

数据存在与对齐的内存地址中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

随机推荐

  1. 在已有软件加壳保护 下实现 Inline hook

    如写的不好请见谅,本人水平有限. 个人简历及水平:. http://www.cnblogs.com/hackdragon/p/3662599.html 正常情况: 接到一个项目实现对屏幕输出内容的获取 ...

  2. python自动化下载yunfile(未完成)

    参考https://www.cnblogs.com/qqandfqr/p/7866650.html import re import requests import pytesseract impor ...

  3. Android4.4 ContentResolver查询图片无效 及 图库删除 添加图片后,ContentResolver不更新的问题解决

    问题背景: 參考链接 做了一个图片浏览,用ContentResolver扫描图库照片.且严格依照时间拍摄顺序排好序显示在listview里.例如以下图所看到的: watermark/2/text/aH ...

  4. 云盘+Git GUI实现云盘文件版本号控制

    以下介绍操作细节 1.先下载Git GUI 下载地址:http://msysgit.github.io/       再下载百度云网盘 下载地址:http://pan.baidu.com 接下来就是安 ...

  5. BZOJ4520:[CQOI2016]K远点对(K-D Tree)

    Description 已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对. Input 输入文件第一行为用空格隔开的两个整数 N, K.接下来 N 行,每行两个整数 X,Y,表示一个点 的坐标 ...

  6. PythonTip(1)

    发现一个Python的题库,嘿嘿,练练手吧~~~ http://www.pythontip.com/ a + b 描述: 给你两个数a.b,请你计算它们的和,并输出. 例如: a = 3, b = 2 ...

  7. Latex 编辑器安装

    MiKTex + TexStudio 1. 下载安装MiKTex,从http://www.miktex.org/下载basic-miktex-2.9.5872-x64.exe,一路默认安装... 或者 ...

  8. 调用URL 接口服务

    1.Net调用URL 接口服务 using System; using System.Collections; using System.Configuration; using System.Dat ...

  9. hadoop 错误

    错误:DataXceiver error processing WRITE_BLOCK operation 2014-05-06 15:21:30,378 ERROR org.apache.hadoo ...

  10. select选中的值改变另一个input的值

    HTML: <select id="hhh" onchange="aa()"><option value="11"> ...