链接性
- 自动局部变量无链接性,生存周期根据函数和括号决定。
- 全局变量是外部链接性,但是如果一个文件定义了该变量,其他文件想要引入该变量必须使用extern关键字声明该变量。
- 静态全局变量是内部链接性,只有文件内部可见,其他外部文件不可访问,但可以重新定义自己的同名变量。
- 静态局部变量无链接性,作用域属于代码块,只有定义的函数可访问,其他函数不可见,同时生存周期是整个程序。
mutable
mutable关键之指出,即便结构或类创建常量实例,其用mutable修饰的成员依旧可以被修改。
struct data{
char name[10];
mutable int accesses;
}
const data veep;
veep.accesses++ //valid, because accesses is mutable
名称空间
using编译指令和using指令是不一样的。
使用using指令就好像声明了这个变量,所以在很函数内部允许再次出现同名变量.
namespace Jill{
double fetch;
}
int main(){
using Jill::fetch;
double fetch //Error!
}
但是使用using编译指令就允许,就好像是进行名称解析。
namespace Jill{
double fetch;
}
int main(){
using namespace Jill;
double fetch; //not error
}
不过局部变量fetch会隐藏Jill::fetch,但你依然可以用域解析符引用fetch——Jill::fetch
未命名的名称空间
这类名称空间的潜在作用域是从声明点到声明区域的末尾,这方面,他们和全局变量很相似。但是因为没有名字,其他文件便无法使用using来使其可见。这与static的作用是等价的。