见主题.他们在想什么?
更新:从"静态"更改为"内部链接"以避免混淆.
举个例子......把以下内容放在一个文件中:
const int var_a = 1;
int var_b = 1;
Run Code Online (Sandbox Code Playgroud)
......并g++ -c test.cpp仅用出口进行编译var_b.
Joh*_*itb 104
我相信你的意思
为什么const意味着C++中的内部链接
确实,如果在命名空间范围内声明一个const对象,那么它就具有内部链接.
附录C给出了基本原理
更改:显式声明为const且未显式声明为extern的文件范围名称具有内部链接,而在C中则具有外部链接
基本原理:因为const对象可以在C++中用作编译时值,所以这个特性促使程序员为每个const提供显式的初始化值.此功能允许用户将const对象放在许多编译单元中包含的头文件中.
小智 10
正如litb所说,const对象具有内部联系.这是因为它们的用途如下:
// a.cpp
const int BUFSIZE = 100;
char abuf[BUFSIZE];
// b.cpp
const int BUFSIZE = 256
int bbuf[BUFSIZE];
Run Code Online (Sandbox Code Playgroud)
在C&C++中,术语静态有多种含义(它可以控制链接和存储)你必须阅读Stroustrup的D&E才能理解他的基本原理 - 但是当你在命名空间范围内声明一个变量为const时,它会自动具有内部联系 - 而在C中,您必须将其声明为静态以强制它具有内部链接.
当然在C++中,不推荐使用静态控制链接,匿名命名空间可用于模拟C++中的内部链接.
C++中的const变量应该替换预处理器常量 - 并且由于预处理器常量仅在定义它们的文件中可见,类似地,const自动使变量仅在定义它的文件中可见.
Const和static是C和C++中的正交概念.
该const关键字告诉编译器禁止该变量作为任何表达式的左值出现 - 实质上使其成为只读.
在C中,static关键字有多种用途,具体取决于它的应用范围.当应用于函数的变量时,它表示该变量不存储在函数的本地范围内,但可以在其调用之间访问.当应用于全局变量或函数时,它只能被特定文件访问 - 换句话说,它只能在编译单元中访问(除非声明extern).
在C++中,static关键字可以在类定义中使用,以使一个变量或函数在类的所有实例之间共享,而不是每个实例的本地.此外,C++中的静态类函数只能访问该类的静态变量(或它有权访问的类).现在,在C++中const确实给成员内部链接到编译单元,除非它们被明确声明extern- 这可能就是你所指的.这允许通过使用头文件在单元之间共享编译时常量.但请记住,成员并不是真正的静态 - 而是将常量编译到引用它的每个位置.
| 归档时间: |
|
| 查看次数: |
16145 次 |
| 最近记录: |