C++常量const
2013-10-17 20:22
176 查看
C++中引入const 关键词 最初的动机是取代预处理其#defines 来进行值替代。其在用于指针,函数变量,返回类型,类对象以及成员函数的用法各不相同。
#define 所定义的常量没有类型,只在预处理期间存在,不占用存储空间。 会产生一些很难发现的错误。因此C++引入了const来消除这些问题。
const常量的存储空间:
通常C++编译器并不为const创建存储空间,将其定义保存在符号表中。当定义一个const时,必须为其赋上一个值
eg:const int bufsize=200;
如下几种情况例外:
1. const的定义一般在定义过的文件中才可见(内部连接),但是可以用extern来声明其他文件中定义的const值。
eg;extern const int bufsize;
此时,const由内部连接转变为外部连接,同时,编译器必须要为该常量分配存储空间。
2. 如果要取一个const的地址,编译器必须为该常量分配存储空间。
3.const用于集合,为了保证编译器不将一个结合保存到符号表中,所以必须为其分配存储空间
const的作用:
1.代替#define的常数表达式
2.表示该值在其生命周期中不可改变,如果程序试图改变它,编译器将报错。
const用于集合:
如 const int i[]={1,2,3,4};
在这种情况下,const 意味着不能改变的一块存储空间,但是不能在编译期间使用它的值,编译器不知道该不能改变的存储空间中的存储内容。
数组定义 如: float f[10],其中[]中的数必须是编译器所知道的常量。所以float f[i[2]] 是非法的。
const指针:
const int *u
int const *u; 如上两种指针的定义表示"u 是一个指针(变量),它指向一个int常量",(指针可以移动) u=&c 是合法的。 *u=2 是不合法的
而 int *const u= &a. 表示u一个常量指针,它指向一个int变量。(地址不变,地址中的内容可以变),*u=2 是合法的。u=&d是不合法的
函数参数和返回值
传递和返回值:
void f1(const int i){...} i在函数体内不能被改变。他是函数创造者的工具,对于函数调用者是隐式的。
const X g() 返回值不能作为左值 g()=X是不合法的。没有多大意义,没人会这么写。
传递和返回地址:
如果传递或返回一个地址(指针或引用)客户程序取地址并修改其初值是可能。有时需要阻止。采用const,如:
void u(const int *cip);
const char *v();
类中的const:
类中的(非static)const的含义是:”在类的一个对象的生命周期中它是一个常量“,该const在构造函数中初始化。
eg:
class A{
private:
const int size;
public:
A(int sz): size(sz){}
}
#define 所定义的常量没有类型,只在预处理期间存在,不占用存储空间。 会产生一些很难发现的错误。因此C++引入了const来消除这些问题。
const常量的存储空间:
通常C++编译器并不为const创建存储空间,将其定义保存在符号表中。当定义一个const时,必须为其赋上一个值
eg:const int bufsize=200;
如下几种情况例外:
1. const的定义一般在定义过的文件中才可见(内部连接),但是可以用extern来声明其他文件中定义的const值。
eg;extern const int bufsize;
此时,const由内部连接转变为外部连接,同时,编译器必须要为该常量分配存储空间。
2. 如果要取一个const的地址,编译器必须为该常量分配存储空间。
3.const用于集合,为了保证编译器不将一个结合保存到符号表中,所以必须为其分配存储空间
const的作用:
1.代替#define的常数表达式
2.表示该值在其生命周期中不可改变,如果程序试图改变它,编译器将报错。
const用于集合:
如 const int i[]={1,2,3,4};
在这种情况下,const 意味着不能改变的一块存储空间,但是不能在编译期间使用它的值,编译器不知道该不能改变的存储空间中的存储内容。
数组定义 如: float f[10],其中[]中的数必须是编译器所知道的常量。所以float f[i[2]] 是非法的。
const指针:
const int *u
int const *u; 如上两种指针的定义表示"u 是一个指针(变量),它指向一个int常量",(指针可以移动) u=&c 是合法的。 *u=2 是不合法的
而 int *const u= &a. 表示u一个常量指针,它指向一个int变量。(地址不变,地址中的内容可以变),*u=2 是合法的。u=&d是不合法的
函数参数和返回值
传递和返回值:
void f1(const int i){...} i在函数体内不能被改变。他是函数创造者的工具,对于函数调用者是隐式的。
const X g() 返回值不能作为左值 g()=X是不合法的。没有多大意义,没人会这么写。
传递和返回地址:
如果传递或返回一个地址(指针或引用)客户程序取地址并修改其初值是可能。有时需要阻止。采用const,如:
void u(const int *cip);
const char *v();
类中的const:
类中的(非static)const的含义是:”在类的一个对象的生命周期中它是一个常量“,该const在构造函数中初始化。
eg:
class A{
private:
const int size;
public:
A(int sz): size(sz){}
}
相关文章推荐
- C++中的const用法【01】----常量与指针
- C++ Special:const关键字和常量指针 vs 指针常量
- C++中四种类型转换以及const_cast是否能改变常量的问题
- c++ const常量的实现机制(转载)2
- C++ Special:const关键字和常量指针 vs 指针常量
- 能否通过内嵌汇编修改C++中const常量的值
- C++中四种类型转换以及const_cast是否能改变常量的问题
- C++中常量类型 const 详解
- C/C++: const常量与define宏定义的区别
- C++中常量指针,指针常量(const 和*)的使用方法和理解方法
- C++ Special:const关键字和常量指针 vs 指针常量
- (C++)const 常量类型
- c/c++中extern、static、const的用法及全局变量/常量
- 【C学习笔记】【疑问】关于const常量的实现机制在C和C++中的不同
- C++ 语法实验室之指针、常量const、字符串和等号初学误区理解
- C++中 Const 常量的用法 推荐
- C++学习之const成员函数(函数声明后加const,或称常量成员函数)用法详解
- 【转】C++ 常量类型 const 详解
- C++中的const成员函数(函数声明后加const,或称常量成员函数)用法详解
- C++学习4:宏定义#define与常量const