• 从C到C++ (1)


    从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
  • 相关阅读:
    gdbinit理解
    debug套路
    node 版本升级
    工作方式
    vscode 插件编写
    函数闭包与装饰器
    高阶函数与递归
    函数嵌套及作用域
    函数
    文件处理
  • 原文地址:https://www.cnblogs.com/uriel/p/3731768.html
Copyright © 2020-2023  润新知