const 作用

    技术2022-05-20  39

          面试遇到了问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)既达不到提高效率的目的,又让人难以理解。

     

     


    最新回复(0)