const在C和C++中的区别
来源:互联网 发布:java程序设计教程答案 编辑:程序博客网 时间:2024/05/16 11:07
Thinking in CPP(version 2)的chapter8 Constants
C++
当你只在定义该const 常量的文件中使用该常量时,c++不给你的const常量分配空间----这也是c++的一种优化措施,没有必要浪费内存空间来存储一个常量,此时const int c=0;相当于#define c 0;
当在当前文件之外使用时,c++会给你的const分配空间(它是迫不得已)。因为若此时如果不分配空间,则obj中根本就不会有该常量的信息。连接的时候就找不到该常量。同样如果你在程序中取了常量的地址,也回迫使c++给你的常量分配空间。
C++编译器在通常情况下不为常量分配空间,而是将其值存放在符号表内.但当使用extern修饰常量时,则必须立即为此常量分配空间(与之类似的情况还有取常量的地址等等).只所以必须分配空间,是因为extern表示"使用外部链接", 这表明还会有其他的编译单元将会使用寻址的方法来引用它,因此它现在就必须拥有自己的地址.
- //***a.cpp***
- #include <iostream>
- extern const int i1;
- extern const int i2 = 1;
- const int i3 = 1; // 不分配空间
- void main ()
- {
- const int i4 = 1; // 分配空间
- //int buf[i1]; // error 此处i1因为外链被当作变量。会编译出错
- int buf0[i2]; // 此处i2被当作常量内联
- buf0[0] = i1; // 此处i1因为外链被当作变量赋值
- buf0[0] = i2; // 此处i2被当作常量内联赋值
- buf0[0] = i3; // 此处i3被当作常量内联赋值
- buf0[0] = i4; // 此处i4被当作常量内联赋值
- std::cout << i1;
- }
- //***b.cpp***
- extern const int i 1= 1; // 外链,分配空间,去掉extern会链接出错,编译期分配空间,若不分配空间obj不会有该变量信息
C
始终外链,始终分配空间。
- //***a.c***
- #include <stdio.h>
- extern const int i;
- void main ()
- {
- printf("%d/n",i);
- }
- //***b.c***
- const int i = 1;
- const在C和C++中的区别
- const 在c和c++中的区别
- const在C和C++中的区别
- const 在c和c++中的区别
- const在C和C++中的区别
- const在c和c++中的区别
- const在c和c++中的区别
- const 在c和c++中的区别
- const 在c和c++中的区别
- const在C和C++中的区别
- const在C和C++中的区别
- const在C和C++中的一个区别
- const在C语言和C++中的区别
- const在C语言和C++中的区别
- const 在C语言和C++语言中的区别
- C++中的const和C中的区别
- const在c/c++中的区别
- const在C与C++中的区别
- 使用 OneNote 跟踪您钟爱的收藏信息
- DWR 调用返回值方法
- naming
- 合并字符串并进行行转列操作
- Decorator Pattern
- const在C和C++中的区别
- 常量函数、常量引用参数、常量引用返回值[C++]
- 我的网站。。大家顶一下啦
- chap1--chpa7
- chap8 const
- chap9 inline function
- chap10 name control
- chap11 reference
- chap12 operator overload