extent static const
来源:互联网 发布:亚马逊 知乎 编辑:程序博客网 时间:2024/06/05 20:10
extern:这就是告诉编译器,这个变量或函数在别的编译单元里定义了,也就是要把这个符号放到未解决符号表里面去(外部链接)。
static:如果该关键字位于全局函数或者变量的声明前面,表明该编译单元不导出这个函数或变量,因些这个符号不能在别的编译单元中使用(内部链接)。如果是static局部变量,则该变量的存储方式和全局变量一样,但是仍然不导出符号。
默认链接属性:对于函数和变量,默认链接是外部链接,对于const变量,默认内部链接。
外部链接的利弊:外部链接的符号在整个程序范围内都是可以使用的,这就要求其他编译单元不能导出相同的符号(不然就会报
duplicated external symbols)。
内部链接的利弊:内部链接的符号不能在别的编译单元中使用。但不同的编译单元可以拥有同样的名称的符号。
为什么头文件里一般只可以有声明不能有定义:头文件可以被多个编译单元包含,如果头文件里面有定义的话,那么每个包含这头文件的编译单元都会对同一个符号进行定义,如果该符号为外部链接,则会导致duplicated external symbols链接错误。
为什么公共使用的内联函数要定义于头文件里:因为编译时编译单元之间互不知道,如果内联被定义于.cpp文件中,编译其他使用该函数的编译单元的时候没有办法找到函数的定义,因些无法对函数进行展开。所以如果内联函数定义于.cpp里,那么就只有这个.cpp文件能使用它。
对于函数和变量,默认的是外部链接,但是如果是const 变量,则是内部链接。const和static就是把变量变为内部变量,外部不可以用。但是extent const变量,外部可以用,但是不能修改。
例如:
在t.cpp的定义如下:
int at = 7;
const int c = 9;
extern const int bt = 3;
在main.cpp
extern int at;//全局变量都是外部变量,其他编译单元只要加extern就可以引用。所以extern的作用就是,这个变量不是在本编译单元定义的
extern void f();//和全局变量一样
int bt = 8;//
int main() {
cout<<at<<endl;
f();
cout<<d<<endl;
return 0;
}
- extent static const
- const, static, const static
- Extent
- extent
- const static 与static const const static
- const、static
- Static & const
- const static
- static const
- const&static
- static /const
- const & static
- static const
- static const
- const static
- static const
- Static Const
- static const、static、const成员
- 试着理解instance recovery时为什么先前滚(roll forward)再回滚(roll backward)
- hadoop集群间的hbase数据迁移
- 应用OpenCV进行OCR字符识别
- 编译metro c++版本出错
- 24点
- extent static const
- jsp跳转的方式
- 多线程补充、多线程问题及处理、线程的同步及相关内容
- C#操作Excel文件
- ubuntu 12.04找不到应用程序图标
- 笛卡儿积与我的小故事
- 【phpcms-v9】自己动手构建一个企业服务模块
- 思考:矩阵的级联顺序与坐标系的关系
- sql 2005 用户 sa 登录失败,该用户与可信SQL Server连接无关联 错误18452