面试遇到了问const作用,当时只说了是用来定义常量的,使其值不可改变。
C言中是用define来定义常量,而C++中引入了const;
回来通过自己查资料才知道 const 主要有3种用法:
(1) 用来修饰函数参数
如果是输出参数的话,是不要用const修饰的,因为输出值是可变的,无法固定。
如果是输入参数的话,分为两种情况:
a) 指针传递 :
加上const,防止意外修改指针,起保护作用
比如strcpy(char* strDest, const char* strSrc);如果函数内部修改了strSrc的内容,编译器将会报错
b) 值传递
比如 func(int a);此时是没有必要加上const修饰的,因为函数自动产生临时变量用来复制该参数,本来就无需保护。
所以不要将func(int a)改成 func(const int a);同样,不要将foo(A a) 改为foo(const A a);其中,A为自定义参数类型;
但是 对于 foo(A a)这类函数,注定了它的效率会很低,因为是非内部函数,要创建临时对象,所以在构造,复制,析构这些过程非常浪费时间;这时候可以 用&,也就是“引用传递”,foo(A &a),“引用传递”只是用了一个别名而已,没有创建临时对象,不会浪费时候,但是这个时候,“引用传递”会产生另一个问题,就是a的值会被函数改变,这时候就可以写成 foo(const A& a);
对于非内部函数,应该将“值传递”改为“const 引用传递”,如foo(A a)-----》foo(const A& a)
对于内部函数,值传递没有必要改成const引用传递,比如 func(int a)---》func(const int a)既达不到提高效率的目的,又让人难以理解。