C++中的const用法
来源:互联网 发布:法律是道德的底线知乎 编辑:程序博客网 时间:2024/05/20 16:43
本文参考《C++编程思想》第八章内容,看过这本书的,请无视以下内容。
在C++中,const一共有四个作用,分别用于值替代、指针、函数参数和返回以及类。
一 值替代
1.const最初的动机就是值替代,也就是说,以前在C语言里,值替代的典型用法是这样的:
#define BUFSIZE 100
现在可以用:
const int bufsize = 100;
这样替换的好处是可以进行类型检查,避免出现一些问题。
2.这样定义的const的值在编译期间就能确定,因此可以用于定义数组,比如:
char buf[bufsize];
3.const变量定义时必须初始化。应该这样:
const int a =100;
如果只是声明:
const int a;
会报错的,不信你试试?
4.原因是C++中const变量默认的是内部连接,也就是在变量所在文件内有效,相当于static的效果,因此在不同的文件中定义同名的const变量是没有任何问题的。但是如果多个文件要共用同一个const变量应该怎么办呢?在某一处定义并初始化,像这样:
extern cons tintx = 1;
并在其他文件里声明:
extern constint x;
所以,const变量在定义时就得初始化的原因就是:把定义和声明区别开。
二 指针
1.指向const的指针
const int * u;int const * u;
这两者的意思都是:u是一个int型指针,指向一个constint。也就是指向常量的指针。
2.const指针
int d = 1;int * const w =&d;
w为一个int型指针,指向一个int值,w指针本身不变。
Ps:为什么有两条语句,参照上文,const变量定义时需要初始化。
3.结合第一点和第二点,可以定义一个指针不变并且指针指向的值也不变的const量,怎么写呢,你猜?
4.可以将一个非const变量的地址赋给const指针,但不能将一个const值的地址赋给一个非const指针。
int d = 1;const int a = 1;const int * b =&d; //rightint * c =&a; //wrong
三 函数参数和返回类型
1.const变量按值传递,则该值不能改变。
void f1(constint i) { i++; //wrong}
2.const量作为返回值时,没什么意义。因为起不到想要的效果,你可以试一下。
3.const指针作为函数参数的情况。这种情况比较复杂,只需要记住,对于用户自定义的数据类型,当用该类型的引用作为函数参数的时候,一定要加const。
四 类
1.const类型的成员变量及其初始化
class Integer { int i;public: Integer(int ii = 0) ; void print();};Integer::Integer(int ii = 0) : i(ii) {}void Integer::print() { cout << i << ' '; }
2.编译期间类里的常量。必须在定义的时候初始化。
class StringStack { static const int size = 100; const string* stack[size]; int index;public: StringStack(); void push(const string* s); const string* pop();};StringStack::StringStack() : index(0) { memset(stack,0,size * sizeof(string *));}void StringStack::push(const string* s) { if(index < size) stack[index++] = s;}const string* StringStack::pop() { if(index > 0) { const string* rv = stack[--index]; stack[index] = 0; return rv; } return 0;}
3.const对象的概念是对象的数据成员在其生命周期内不被改变。因此,它只能调用const成员函数,不能调用非const成员函数,因为那有可能改变数据成员。
class Quoter { int lastquote;public: Quoter(); int lastQuote() const;};Quoter::Quoter() { lastquote = -1; srand(time(0));}int Quoter::lastQuote() const { return lastquote;}
- const在c中的用法
- const在c中的用法
- c++,c语言中的const用法
- c语言中的const的用法
- C/C++中的const真正的用法
- const在C语言中的用法
- Objective-C中的const extern static用法
- c语言中的const的用法
- const在C语言中的用法详解
- C语言中的const,free用法详解
- C与C++中的const用法
- C/C++中的const和const指针的基本用法
- const用法(C/C++)
- C语言中的const,volatile,restrict用法总结
- C++中的const用法
- C++中的const用法
- C++中的const用法
- C++中的const用法
- 安装svn后 桌面图标突然变出蓝色问号解决方法
- Android项目中引用到其他工程
- 关于__int64
- jQuery cxSelect
- 安装bash-completion,git的tab补全
- C++中的const用法
- 【传递正能量】献给那些正在试用期或实习期的人
- Android开发环境搭建
- Python标准库:内置函数dir([object])
- strcpy源码解说
- 在ListCtrl中插入图标(I)
- xcode debug模式和release模式的设置
- JS中typeof与instanceof的区别
- 细雨带风谱写了一曲曲春日恋歌