从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. 二维数组展示到DataGridView(c#)

    窗体程序中二维数组展示到DataGridView public void TwoDArrayShowINDatagridview(string[,] arr) { DataTable dt = new ...

  2. angular2 里父子组件传值的坑

    1.如果传的是基本类型的值,子组件里改变该值,父组件无变化 2.如果传的是对象,子组件里改变对象里的变量,父组件会变化 3.如果传的是函数,this不会继续指向父组件对象了,如果需要this指向父组件 ...

  3. Window下搭建foundation apps环境

    Window下搭建foundation apps环境 框架:AngularJS.Foundation, 构建工具:Gulp, 开发环境:node.js. 操作系统:windows (一)环境准备 1 ...

  4. php new self()关键字的用法

    今天开框架源码,发现有用到new self()的用法  有点不懂  在网上查了一下,给大家说一下: 在类中 self的用法 和this的用法差不多 , php  new self() 一般在类内部使用 ...

  5. 【洛谷P1288】取数游戏II

    取数游戏II 题目链接 显然,由于一定有一个0,我们可以求出从初始点到0的链的长度 若有一条链长为奇数,则先手可以每次取完一条边上所有的数, 后手只能取另一条边的数,先手必胜: 反之若没有奇数链,后手 ...

  6. Android学习笔记_24_多媒体MediaPlayer对象之音乐播放器与SoundPool声音池

    一.MediaPlayer对象常用方法介绍: MediaPlayer mediaPlayer = new MediaPlayer(); if (mediaPlayer.isPlaying()) { m ...

  7. oracle官网下载教程

    1.百度搜索oracle   也可以直接点击进入   oracle官网   或直接进入   下载页面 2.选择中文,看的更容易些 3.拉到最下面,选择所有下载和试用 4.选择数据库下载 5.点击下载对 ...

  8. JavaScript运算操作符

    1. "+" (1)数学运算 var a = 1 + 1; console.log(a); //输出值为2 (2)字符串连接 (任何数据类型加字符串都等于 字符串) var ini ...

  9. #leetcode刷题之路5-最长回文子串

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1:输入: "babad"输出: "bab"注意: " ...

  10. 【原创】os.chdir设置的工作路径和sys.path之间到底是个啥关系?

    转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9390455.html   直接放上测试后的结论(测试代码和截图过多,有兴趣的小伙伴可自己测试,未来看情况 ...