C++中const的含义
来源:互联网 发布:淘宝手机详情动态图 编辑:程序博客网 时间:2024/06/08 15:27
在学习c++期间,一次偶然看到一篇文章,文提到一个问题:关键字const是什么含意?然后作者接下来又说到,如果对方回答说:“const意味着常数”,就知道正在和一个业余者打交道。这话使我震惊了,然后继续把文章看完了,并按文章所说的,下载了Dan
Saks的const T vs. T const文章,并仔细看了一遍。现记录一下自己的理解。
在说明问题之前,先来看一个小例子:
typedef void *VP;
const VP vectorTable[] = {...<data>..};
跟上面这段代码等价的是不是下面这段代码呢?
const void *vectorTable[]={..<data>..};
其实不然,真正跟它等价的应该是:
void *const vectorTable[]={..<data>..};
vectorTable的含义是一个数组,包含的元素为常量的void指针。
在解释这个问题之前,我们来看一下声明语句的结构:
static unsigned long int *x[N];
斜体的为声明说明符,而粗体的声明符。每一个C、c++语言的声明都包括两部分,0个或多个声明说明符,一个或多个声明符,
声明符由逗号分开。声明符是被声明的名字,被一些操作符,如*,[],()和&所包围。这些操作符的优先级跟它们在表达式中的优先级是
一样的。括号在声明语句中可以担任两个角色,一个是函数调用操作符,一个是组合。作为函数调用操作符时,优先级和下标操作符[]
一样,作为组合时,有最高的优先级。例如:*f(int)声明f是函数,返回一个指针;而(*f)(int)则表明f是一个函数指针。声明符可以包
含多个操作符,如*x[N],也可不包含操作符,如声明语句:int n;。
声明说明符其实是类型说明符,如int,unsigned,存储类说明符如static或extern,inline和virtual。类型说明符用来说明声
明的变量的类型的,其它的说明符并不提供类型信息。const和volatile是类型说明符。声明语句中的声明说明符的顺序并没有要求。
能出在声明符中的声明说明符仅为const和volatile。如:void *const vectorTable[];出在声明符中,顺序就不能再变化:
如*const void vectorTable[]就是错误的。
因为声明说明符的出现顺序并没有限制,因此推荐将const放在右边:如T const *p; p是一个指向常量类型T的指针,
T *const P,p是一个常量指针,指向T类型。这样有利于正确理解语句的意思。尽管C和C++的解析大部分都是自顶向下和从左到右的,
但对于声明语句,从某种意义上来说,是从后面开始的,也就是从右向左的。在对待声明说明符和声明符时,也应该了解它们的界限,如
语句:const int* P;最好写成:const int *p;这样更一目了然,而且不易出错。
- C/C++中 const的不同含义
- Object C语法中const、extern和static的含义
- C++中const的含义
- c++中const的含义
- c++中const的用法,含义,好处
- const的含义【转】
- const 的含义
- 关键字const的含义
- 关键字const的含义
- const的含义
- const的具体含义
- C语言const 限定词真正的含义“只读的”
- const在变量前后,函数后的含义(C++)
- C、C++基础知识之一 关键字const的含义和用途
- c中static的含义
- C/C++中%的含义
- 类中成员函数声明后面的const的含义!
- C中CONST的使用
- 接口和内部类、抽象类的特性
- iPhone开发入门(1)—开发工具
- 带用户名和密码的SVN checkout
- 当浏览编译的网页时出现 Could not load type error 的解决办法
- CoreData Model
- C++中const的含义
- HadoopDB集群配置方法
- OLEDB的Excel的IMEX和HDR是什么意思
- 编译出错"new types may not be defined in a return"
- PHP 操作MySQL类,有过滤函数
- javascript
- centos5.5升级到CentOS 5.6
- bash 资料汇总
- Windows+OpenLDAP+MySQL配置及使用详解(二)——数据库初始化