容易混淆的 const

        关键字 const并不能把变量变成常量!在一个符号前加上const限定符只表示这个符号不能被赋值。也就是它的值对这个符号来说是只读的,但它并不能防止通过程序的内部(甚至是外部)的方法来修改这个值const最有用之处就是用它来限定函数的形参, 这样该函数将不会修改实参指针所指的数据,但其他的函数却可能会修改它。这也许就是 c和 c++中const最一般的用法 。

        const可以用在数据上, 如:

                 const  int  limit =  10;

        这和其他语言差不多, 但当你在等式两边加上指针, 就有一定难度了:

                 const int*limitp= &limit;

                 int i= 27;

                 limitp= &i;

        这段代码表示limitp 是一个指向常量整型的指针。 这个指针不能用于修改这个整型数,但是在任何时候, 这个指针本身的值却可以改变。 这样, 它就指向了不同的地址, 对它进行解除引用 ( dereference)操作时会得到一个不同的值!

        const和*的组合通常只用于在数组形式的参数中模拟传值调用 。 它声称 “我给你一个指向它的指针,但你不能修改它。”这个约定类似于极为常见的 void*的用法,尽管在理论上它可以用于任何情形, 但通常被限制于把指针从一种类型转换为另一种类型 。

        类似地,你可以取一个 const变量的地址,并且可以…(''唔,我最好不要往大家的脑袋里灌输这种思想") 。正如 Ken Thompson所指出的那样, const关键字可能引发一些罕见的错误,只会混清函数库的接口 。回首往事, const关键字原先如果命名为 readonly就好多了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章