c++面试(二)

1.宏参数的连接

#define CONS(a,b) (int)(a##e##b)

CONS(2,3) =>2e3 =2000

2.const

int b=10;

int c=20;

const int *a1=&b;    //指针指向常量,修改指针可以a1=&c(对),但是修改指向的内容不行*a1=1(错)。

int* const a2=&b;    //指针本身为常量。a2=&c(错),*a2=1(对)。

const int* const a3=&b;    //双const:指针本身不能改,只想内容不能改。

3.#define:    Compile-Time    止于编译期

     const:     Run-Time          在堆栈只分配了空间

4.const的作用

(1)定义常量。

(2)修饰函数形参。

形参为用户自定义或抽象数据类型时,应该把“值传递”改为“const &传递”,提高效率。

void fun(A a)

void fun(A const &a)    //不需要产生临时对象,节省了构造、复制、析构过程的时间。但光引用可能会改变a,所以加上const。

(3)const修饰函数的返回值:

如给“指针传递”的函数返回值+const,返回值不能被直接修改,且只能赋给+const修饰的同类型指针。

(4)const修饰类的成员函数(定义体)

int GetCount(void) const;

任何不会修改数据成员的函数都应+const。

5.static有什么作用

(1)函数体内,静态变量调用过程其值不变。

(2)在模块内(函数体外),静态变量可以被模块内所有函数访问,但不能被模块外其他函数访问。    它是一个本地的全局变量。

(3)在模块内,一个被声明为静态的函数值可被这一模块内的其他函数调用。

原文地址:https://www.cnblogs.com/define-ray/p/5393215.html