从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. ubuntu 可以加速播放的播放器SMPlayer 16.4安装

    直接贴命令 sudo apt-add-repository ppa:rvm/smplayer sudo apt-get update sudo apt-get install smplayer smp ...

  2. hdu1852 Beijing 2008

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1852 题目大意: 求2008^n的所有因子和m对k取余,然后求2008^m对k取余. 解题思路: 首 ...

  3. swift语言的特点(相对于oc)

    1.泛型.泛型约束与扩展: 2.函数式编程: 3.值类型.引用类型: 4.枚举.关联值.元组等其他 上述为swift最大的特点 Another safety feature is that by de ...

  4. 记忆化搜索,FatMouse and Cheese

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1107 http://acm.hdu.edu.cn/showpro ...

  5. LG3690 【【模板】Link Cut Tree (动态树)】

    题目 终于去写\(LCT\)了 这个大爷讲的挺好的 板子 #include<algorithm> #include<iostream> #include<cstring& ...

  6. 五、设置 IntelliJ IDEA 主题和字体的方法

    我们已经用 IntelliJ IDEA 创建了第一个 Java 项目 HelloWorld,如下图所示: 观察上图,大家有没有发现一些问题,例如,整个界面的字体是不是都太小了一点啊?不知道大家感受如何 ...

  7. P3393 逃离僵尸岛

    P3393 逃离僵尸岛 啊.好久不写dij手都生了 这道题就是预先处理出是否是危险城市,然后跑一个最短路就行了 然后因为我感觉这个对时间要求不大紧.判断危险城市时就写了个电风扇(DFS) 然后T飞了呜 ...

  8. 【洛谷P2341】受欢迎的牛

    受欢迎的牛 题目描述 一些可以当明星的牛,一定会构成一个强连通分量,我们可以先缩点,最后统计一下出度为零的强连通分量大小即可, 若出度为零的强连通分量个数大于1,则输出0 #include<io ...

  9. swiper插件使用技巧

    1.加载插件: <!DOCTYPE html> <html> <head> ... <link rel="stylesheet" href ...

  10. JS JavaScript深拷贝、浅拷贝

    浅拷贝:浅拷贝只是复制了内存地址,如果原地址中的对象改变了,浅拷贝出来的对象也会相应改变. 深拷贝:开辟了一块新的内存存放地址和地址指向的对象,原地址的任何对象改变了,深拷贝出来的对象不变. 浅拷贝数 ...