第九章 作用域&链接&名称空间

链接性

  • 自动局部变量无链接性,生存周期根据函数和括号决定。
  • 全局变量是外部链接性,但是如果一个文件定义了该变量,其他文件想要引入该变量必须使用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的作用是等价的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值