const的用法

来源:互联网 发布:eia油库存最新数据 编辑:程序博客网 时间:2024/05/20 18:16

    对于const的用法,我总结了几位前辈的文章,得出下文,由于水平有限,有错之处,还烦请各位朋友指正。

1、为什么使用const
   采用符号常量写出的代码更容易维护指针常常是边读边移动,而不是边写边移动(这一句我不能理解,还请理解的朋友帮忙指出);许多函数参数是只读不写的。const最常见用途是作为数组的界switch分情况标号(也可以用枚举符代替)

2、用法

     用法1:常量
       (1定义常量不分配空间,取代了C中的宏定义,声明时必须进行初始化。const限制了常量的使用方式,并没有描述常量应该如何分配。如果编译器知道了某const的所有使用,它甚至可以不为该const分配空间。最简单的常见情况就是常量的值在编译时已知,而且不需要分配存储。C++ Program Language
       (2声明变量分配空间,用const声明的变量虽然增加了分配空间,但是可以保证类型安全。
C
标准中,const定义的常量是全局的,C++中视声明位置而定。

     用法2:指针和常量
       使用指针时涉及到两个对象:该指针本身和被它所指的对象。将一个指针的声明用const“预先固定将使那个对象而不是使这个指针成为常量。要将指针本身而不是被指对象声明为常量,必须使用声明运算符*const所以出现在 * 之前的const是作为基础类型的一部分:

       从右向左读的记忆方式:
         1)const int a;

            int const a;    //两条语句的意义相同,声明一个常整形数a

            char const *pc1; 

            const char *pc2; //const char的指针(后两个声明是等同的)

        2) char *const cp1; //a const cp1 of pointer to char,指向char的常指针

        3) const int *cp2;     //a cp2 of pointer to int of const,意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)
        4)
int const * a const; //意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)
   用法3const修饰函数传入参数
      将函数传入参数声明为const,以指明使用这种参数仅仅是为了效率的原因,而不是想让调用函数能够修改对象的值。同理,将指针参数声明为const,函数将不修改由这个参数所指的对象。
         int FindNum(const int array[], int num, int conut);//声明函数

        上面这例子中,编译器会把array[]当作常量数据的数组看待。所以,假如你不小心给数组赋值,那么,编译器就会报错了。因此,当你不需要也不想修改数组的数据时,最好用const把数组定义为常量数组。

   用法4:修饰函数返回值
      可以阻止用户修改返回值。返回值也要相应的付给一个常量或常指针。

   用法5const修饰成员函数
         const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数;
         const
对象的成员是不能修改的,而通过指针维护的对象确实可以修改的;
         const
成员函数不可以修改对象的数据,不管对象是否具有const性质。编译时以是否修改成员数据为依据进行检查。

3、使用const的优点:

     1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)
     2).
通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
     3).
合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

原创粉丝点击