C++面试题整理之一

来源:互联网 发布:mac连蓝牙耳机 编辑:程序博客网 时间:2024/04/20 23:34

1. 解释#ifdef

    #ifdef是条件指示符,用来判断某个预处理器常量是否已被定义,如果该预处理器常量被定义,#ifdef后面的代码才会被编译。#ifdef的一个主要用途就是防止头文件重复处理。

2. #define一个宏,比较两个数的大小,不能使用大于、小于和if语句

3. staic的作用

   1)static局部变量:内存分配在全局数据区。执行到声明处时初始化,下次函数调用不再初始化,值维持上次的值。如果没有显示初始化,自动初始化为0. 作用域为局部作用域。

   2)static全局变量:内存分配在全局数据区。如果没有显示初始化,自动初始化为0. 只在声明它的文件内可见。

   3)  static函数:只在声明它的文件内可见。

   4)static成员变量:属于整个类,类的所有对象只有一份拷贝。内存分配在全局数据区。

   5)static成员函数:属于整个类,不接收this指针,只能访问statci成员变量和static成员函数。

4. const的作用

   定义常量。修饰函数参数和返回值。修饰函数定义体。被const修饰,可以得到强制保护,预防意外修改,提高程序健壮性。

  1)const修饰函数参数

        - const只修饰输入参数,输出参数不需要const。

        - 修饰指针传递的参数:防止意外修改指针指向的内容。对于值传递的参数,函数会自动产生临时变量复制该参数,不需要const修饰。

       - 修饰自定义类型引用传递的参数:自定义类型引用传递,不会产生临时对象的构造、复制和析构,提高了效率。加上const修饰,防止修改该参数。

  2)const修饰函数返回值

      - 对于值传递的函数返回值,函数会自动产生临时变量复制该参数,不需要const修饰。

      - 修饰指针传递的函数返回值:该返回值的内容不能被修改,且只能被赋值给被const修饰的同类型指针。

      - 修饰自定义类型引用传递的返回值:一般用在类的赋值函数中。

  3)const修饰函数定义体: 任何不修改数据成员的函数都应该声明为const类型。

5. 比较sizeof和strlen

  1) sizeof是操作符,返回一个对象或类型名的字节长度,返回值类型为size_t. strlen是一个函数,计算给定字符串的长度,只能用char*做参数,且必须是‘\0’结尾的。

   2)sizeof操作符是编译时刻计算,可看做常量表达式。strlen是运行时刻计算的。


0 0