小众知识

首页 > 正文

const对象存在的符号列表是什么东东?

被const修饰的符号常量,一般是不分配内存的,除非复杂对象或强制要求分配。C++编程思想上说:“C++编译器通常并不为const分配存储空间,相反它把这个定义保存在它的符号表里,使用时,它在编译时会进行常量折叠”。有的地方说“符号列表”。
    这个东东是什么?“符号表”?
    “它的”? 谁的? 编译器的?  

(一)简单介绍,把握全局
1.》》const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)。const和define定义的常量可以放在头文件里面。(小注:可以多次声明,但只能定义一次)
2.》》const与指针和引用。
(a)const与指针。
先来看看下面的几种定义:
1
2
3
4
intme;
constint*p1=&me;//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向
int*constp2=&me;//p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向。
constint*constp3=&me;//p3不可变,*p3也不可变,此时既不能用*p3来修改其值,也不能转向
(b)指针和引用的区别很简单,就是引用更简洁,更安全。因为引用声明时必须初始化。 引用更接近const指针,一旦与某个变量关联,就将一直效忠于他。
(c)const指针可以接受const和非const地址,但是非const指针只能接受非const地址。所以const指针的能力更强一些,所以尽量多用const指针,这是一种习惯。
3.》》(a)const与函数。由于 c,所以经常把函数的形参类型设为const,而且多为const 引用。但是这里有一个限制,不能把不是左值的地址传递给引用。(左值包括变量,数组元素,结构成员,引用,被解除引用的指针等)。 形参是const类型的,说明该函数将不会修改其值,该函数便为const函数。
(b)const与类成员函数。先看看下面这段代码:
1
2
constStockland=Stock("hyd");
land.show();
land 是常量,但是类成员函数show无法保证不修改land,所以编译器将拒绝执行该段代码。除非你能保证show像const函数一样,但这需要另外一种语法,即:
void show() const; //声明
void Stock::show() const{} //定义

 out4b 发表于:2003-08-25 09:42:53
得分:10 

constant folding

看编译原理。 

 wbh0360 发表于:2003-08-25 09:54:20
得分:10 

编译器创建的,详见编译原理。

上一篇:有关析构函数的问题
下一篇:高分求二阶偏微分方程数值解法!

分享到: