C++ const对象
来源:互联网 发布:算法基础 打开算法之门 编辑:程序博客网 时间:2024/06/06 10:41
1.值替代
c++中const默认为内部链接(internal linkage),cosnt仅在被定义过的文件里才是可见的,而在链接是不能被其他编译单元看到。
在定义const时,必须赋值,除非使用extern进行说明
extern const int bufsize;
通常C++编译器并不为const创建存储空间,相反它把这个定义保存在它的符号表里。但是extern强制进行了存储空间分配(另外,如果取一个const的地址,也要进行存储空间的分配),由于extern意味着使用外部链接,因此必须分配存储空间,这也就是说有几个不同的编译单元应当能够引用他,所以必须有存储空间的分配。
通常,如果定义const对象时,extern不是定义的一部分时,const对象不会分配存储空间,如果使用const,那么编译时,会进行常量折叠(同#define的替换相似)。
参考下面代码(const 对象默认为内部链接)
test.h
#ifndef TEST_H_#define TEST_H_const int a = 10;extern const int b = 15;int c = 5;//普通变量默认为extern#endif
test.cpp
#include “test.h”
main.cpp
extern const int a;
extern const int b;extern int c;//cout << a << endl;//error C2065: “a”: 未声明的标识符
cout << b << endl;//ok const int cout << c << endl;//ok
const可以用于聚合,但是编译器不会把聚合保存到它的符号表中,所以必须分配内存。在这种情况下,const意味着“不能改变的一块存储空间”。然而,不能在编译期间使用它的值,因为编译期间不需要知道存储的内容。
extern const int b;const int carray[] = { 1, 2, 3, 4};//float f[carray[3]];//errorstruct S{int i, j;};const S s[] = { { 1, 2}, { 3, 4}};//double d[s[1].j];//error//double darray [b];//error
编译器为const对象分配空间后,在编译期间不知道const对象的值,因此无法声明数组。
- C++const函数和const对象
- 【C++】const对象和const成员
- C++const对象和 引用
- 3.7对象与const【C++】
- [C++] const对象只能调用const方法的原因
- C++const对象 常量数据 常量成员函数 const指针 const引用
- C++ const对象 和 C const对象的区别之一 —— 默认作用域
- <C++>const在不同对象不同位置中的作用
- 【学习C++】C++常对象精讲 — const关键字
- const c
- const【C++】
- const ||c
- C++Const
- [c++]const
- C++:const
- C++之const对象只能调用const成员函数---补充(18)《More Effective C++》
- const对象与const函数
- const对象和const函数
- hdu Super Jumping! Jumping! Jumping!
- 镜像文件
- A New Growth Industry
- 线性代数的本质--对线性空间、向量和矩阵的直觉描述
- In-App-Purchase 中文版
- C++ const对象
- hdu4488 Faulhaber’s Triangle(模拟)
- 第四章函数--函数进阶(递归函数)项目2拓展求最大公约数
- android设置页面之PreferenceActivity及Preference
- 《linux程序设计》--读书笔记--第十四章信号量、共享内存和消息队列
- lib 和 dll 的区别、生成以及使用详解
- win7下出现UnknowCopnent报告解决
- 数组与指针关系
- 第一次发