C++笔记记录贴1

来源:互联网 发布:linux查看版本命令 编辑:程序博客网 时间:2024/06/03 12:41


1、inline内联函数和普通函数的区别:

(1)inline函数没有普通函数标准的栈帧开辟和回退过程,效率高。

(2)inline在编译阶段处理,可写在头文件中或调用点前。

(3)inline只在release版本中起作用。在debug中和普通函数无异。

(4)inline修饰的函数最后由编译器决定是否处理成内联,如递归函数等式就不能被处理为inline。

(5)inline在函数调用点把函数代码展开从而不产生函数调用的开销,不产生函数符号,所以其他文件不可访问该函数。

    (inline需要加在函数定义前。类中定义的函数都是内联的 )


2、函数重载问题:

(1)C语言的函数符号生成只和函数名字有关

(2)C++函数符号的生成,和函数名参数列表有关。

(3)C++中函数名同,参数列表不同,称为重载

(4)重载的函数必须处在同一作用域

(5)constvolatile修饰的非指针非引用形参不能构成重载


3、const的使用:

(1)const type m;限定m不可变。

     1)const在前面

     const int n; //n是const

     const char *p; //*p是const, p可变

     const char* const p2; //p2和*p2都是const

     2)const在后面

     int constm; //mconst

     char const * p3; //*p3是const, p3可变

     char* const p4; //p4const,*p4可变

    char const* const p5; //p5*p5都是const

(2)C中const可初始化一次,之后不可被修改,是常变量,可被指针修改,不可定义数组长度。

(3)C++中const必须初始化,不可修改,是常量,可被指针修改,可用来定义数组长度。

(4)C++中在编译时用const修饰的量会被替换成初始值。若初始时赋的变量,则会它变成常变量。


3、引用:

(1)可看做更安全的指针。int &b = a;给a取别名为b,修改b就是修改a。

(2)引用自带解引用,可以访问引用的内存。引用不参与类型。

(3)引用必须初始化,之后不可指向其他变量(不能重复引用)。

(4)引用的量必须可寻址。

(5)引用无法寻址的常量(如10或者寄存器内的)必须const引用(如const int &a=10产生一个临时量tmp=10,再对tmp引用)

(6)引用常量用常引用(如地址)。内置类型产生的临时量是常量(返回值在寄存器内无法寻址)。自定义类型class,struct)产生的临时量是变量(返回值可指针、引用操作)。这里需要注意的一点是:如果自定义类型是隐式转换产生的临时量是常量。

  1)a+++++b//根据贪吃法,分成a++ ++ +b这个表达式error。因为a++返回给临时量,他是常量。

  2)++a+++b//++ a++ +b这个表达式error因为首先执行a++。

  3)Cout<<(++a)+(++a)+(++a); →++a;++a;++a;cout<<a+a+a;//++a返回给临时量

  4)Cout<<(a++)+(a++)+(a++); →cout<<a+a+a;a++;a++;a++; //a++返回给a

  下面是指针和引用的应用:

int main()

{   

   int array1[10];  

   int array2[2][3]; 

   char *array3[2];     

   int *p0 = array1;

   int (*p1)[10] = &array1;  

   int (*p2)[3] = array2;

   int (*p3)[2][3] = &array2;

   char **p4 = array3; 

   char *(*p5)[2] = &array3;//sizeof(p5)=4

   int (&p6)[10] = array1;//sizeof(p6)=40

   int (&p7)[2][3] = array2;

   char *(&p8)[2] = array3;

}







原创粉丝点击