限定符【const】用法大全
1. 限定符声明变量只能被读
const int i=5;
int j=0;
...
i=j; //非法,导致编译错误
j=i; //合法
2. 必须初始化
const int i=5; //合法
const int j; //非法,导致编译错误
3. 在另一连接文件中引用const常量
extern const int i; //合法
extern const int j=10; //非法,常量不可以被再次赋值
4. 便于进行类型检查
用const方法可以使编译器对处理内容有更多了解。
#define I=10
const long &i=10; /*dapingguo提醒:由于编译器的优化,使得在const long i=10; 时i不被分配内存,而是已10直接代入 以后的引用中,以致在以后的代码中没有错误,为达到说教效 果,特别地用&i明确地给出了i的内存分配。不过一旦你关闭所 有优化措施,即使const long i=10;也会引起后面的编译错误。*/
char h=I; //没有错
char h=i; //编译警告,可能由于数的截短带来错误赋值。
5. 可以避免不必要的内存分配
#define STRING "abcdefghijklmn\n"
const char string[]="abcdefghijklm\n";
...
printf(STRING); //为STRING分配了第一次内存
printf(string); //为string一次分配了内存,以后不再分配
...
printf(STRING); //为STRING分配了第二次内存
printf(string);
...
由于const定义常量从汇编的角度来看,只是给出了对应的内存地址,
而不是象#define一样给出的是立即数,所以,const定义的常量在
程序运行过程中只有一份拷贝,而#define定义的常量在内存中有
若干个拷贝。
6. 可以通过函数对常量进行初始化
int value();
const int i=value();
dapingguo说:假定对ROM编写程序时,由于目标代码的不可改写,本语句将会无效,不过可以变通一下:
const int &i=value();
只要令i的地址处于ROM之外,即可实现:i通过函数初始化,而其值有不会被修改。
7. 是不是const的常量值一定不可以被修改呢?
观察以下一段代码:
const int i=0;
int *p=(int*)&i;
p=100;
通过强制类型转换,将地址赋给变量,再作修改即可以改变const常量值。
(To be continued)
Ref:
http://www.cnblogs.com/chenleiustc/archive/2011/04/09/2010647.html
http://blog.csdn.net/hackbuteer1/article/details/7459212
http://www.vckbase.com/index.php/wv/224
限定符【const】用法大全的更多相关文章
- C++ 限定符Const和指针
指向常量的指针 指向常量的指针不能用于其所指对象的值.若想存放常量对象的地址,只能使用指向常量的指针. const int a = 3; //a是个常量,其值不能改变 int *b = &a; ...
- Chapter03 第二节 const限定符的使用
3.2 const限定符 const的作用:替代#define作为有类型检查的常量来使用.他的值被初始化后就固定了,成为一个只读变量,不能更改.(推荐使用特殊的命名规范来区分常量和非常量). cons ...
- (1)指针、引用、const限定符
自己看书时的一些理解,可能有错误的地方.随着指针的使用增多,会不断修改这篇文章的内容,过去错误的会用划线划去后保留. 1.对引用.指针.常量引用.指向常量的指针.常量指针的理解 //对引用.指针.常量 ...
- [C/C++]const限定符总结
const限定符 const是一种限定符,被const所限定的变量其值不可以被改变. const的初始化 由于const一旦创建其值就不能够被改变,所以我们必须对其进行初始化 const int a; ...
- const限定符用法汇总
const限定符限定变量的类型是一个常量,对象一旦创建后其值就无法改变,所以const对象必须初始化. 初始化 const int i = get_size(); //运行时初始化 const int ...
- C++ const 限定符
C++ const 限定符 作用:把一个对象转换成一个常量 用法:const type name = value; 性质:1. 定义时必须初始化,定义后不能被修改.2. 类中的const成员变量必须通 ...
- 变量和基本类型——复合类型,const限定符,处理类型
一.复合类型 复合类型是指基于其他类型定义的类型.C++语言有几种复合类型,包括引用和指针. 1.引用 引用并非对象,它只是为一个已存在的对象所起的另外一个名字. 除了以下2种情况,其他所有引用的类型 ...
- 浅谈const限定符
什么是const限定符? Const限定符是我们通常所说的常量限定符,被const修饰的对象具有常量性质,只能读,不能写. 为什么使用const限定符? 用const变量取代“魔数”,代码更容易理解和 ...
- const限定符、constexpr和常量表达式------c++ primer
编译器将在编译过程中把用到const变量的地方都替换成对应的值,为了执行这种替换,编译器必须知道变量的初始值.如果程序包含多个文件,则那个用了const对象的文件都必须能访问到它的初始值才行.要做到这 ...
随机推荐
- Selenium2(webdirver)入门之环境搭建(Java版)
一.开发环境: 1.JDK1.6 2.Eclipse:Version: Kepler Service Release 1,下载地址:http://www.eclipse.org/downloads/ ...
- 在VS中MFC、ATL与WIN32有什么联系或区别?
有时候遇到一些初学者问我这个问题:在VS中使用MFC和ATL与使用WIN32有什么联系或区别?通俗来说,win32是通过调用windows api去实现需要的功能.而MFC和ATL是封装好的类库,包含 ...
- hdu2457
AC自动机+DP #include <cstdio> #include <queue> #include <cstring> using namespace std ...
- Java计时器Timer和TimerTask用法
package com.sy.game.test; import java.util.Timer; import java.util.TimerTask; public class TimeTask ...
- Java for LeetCode 215 Kth Largest Element in an Array
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...
- ABAP 弹窗案例
DATA: WL_ANSWER TYPE C. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING TEXT_QUESTION ...
- Effective C++ -----条款10: 令operator=返回一个reference to *this
比如: Widget& operator=(const Widget& rhs) { ... return* this; } 令赋值(assignment)操作符返回一个referen ...
- CODE VS1008选数
#include<cstdlib> #include<cstdio> #include<iostream> #include<cmath> #inclu ...
- Gson简要使用笔记
最近在做一个java web service项目,需要用到jason,本人对java不是特别精通,于是开始搜索一些java平台的json类库. 发现了google的gson,因为之前对于protoco ...
- 【Git】笔记5 分支管理2
来源:廖雪峰 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一 ...