C++——Const总结
2016-07-09 23:53
316 查看
作用域
默认const定义在函数外,则作用域仅在文件内有效如果希望扩大作用域,则需要在变量定义和声明之前添加 extern关键字。
// file_1.cpp
extern const int maxValue = 1024;
// file_1.h
extern const int maxValue;
特征
当以编译时初始化的方式定义一个const对象时,如下面所示const int maxValue = 1024;
因为是通过常量表达式初始化,所以编译器在编译的时候会把使用该变量的地方替换成对应的值。代码中所有使用maxValue的地方都会被替换成1024。
可以通过指针来改变const 局部变量的值
不过要注意const不能是常量表达式。也就是说,不能在编译阶段计算出来。因为常量表达式的const会在编译阶段直接将使用该const常量表达式的地方替换成const所代表的常量(如上面的maxValue常量)。也就是说在运行阶段改变了const局部变量的值,并不会影响使用const常量的语句。因为这些使用const常量的地方,在编译阶段就已经被替换为相应的常量表达式。
成功改变const局部变量的例子
#include <iostream> using namespace std; int fun() { return 1; } int main() { const int a = fun();//使得const变量需要在运行阶段才能计算出来。 int* b = (int *)&a; *b = 31; cout << a << endl; return 0; }
输出结果为
31
但是非局部const变量则会出现段错误:
#include <iostream> using namespace std; int fun() { return 1; } const int a = 23; int main() { //const int a = fun(); int* b = (int *)&a; *b = 31; cout << a << endl; return 0; }
输出以下错误,也就是有代码修改了不能修改内存区域
[1] 18284 segmentation fault ./CppLearn
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C++的template模板中class与typename关键字的区别分析
- C与C++之间相互调用实例方法讲解