第9章:内存与命名空间

  • include<>编译器会在存储标准头文件的文件系统查找,include""编译器会首先查找当前工作目录或者源文件目录。
  • register在C++11中不在具有将变量放入寄存器的作用,但依然还可以使用。
  • 定义在函数外面的变量为静态变量,而使用static修饰,那么只能在当前文件使用,不能链接到其他文件。
int global = 10;
//在所有文件都可以使用
//如果其他文件要使用这个变量,要使用extern关键词
// extern int global;
static int one_file = 30;
//只在当下文件使用。
int main()
{
    static int ss = 20;
    //作用域只是函数里面。
}

还可以使用static修饰函数使之只在单文件雷链接函数默认外链接

使用extern来声明其他文件的静态外链接变量。
static 变量在cpp文件可以访问。

存储说明符与cv-限定符。

存储说明符

  • auto
  • register
  • static
  • extern
  • thread_local

//表明变量的持续性和所属线程的持续性相同。

  • mutable

//为了突破const的限制而定义的关键字

cv-限定符
  • const
  • volatile

C++中volatile的作用

mutable

struct Test
{
    int a;
    mutable int b;
};

const struct Test test = {1,2};
test.a = 10;  //编译错误
test.b = 20;  //允许访问

  • new分配的内存一直都可以在所以文件中使用。
    直到他被delete。

定位new运算符

char buffer[109];
new (buffer) typename variblename

它不检查内存是否使用,并将所有内存强制转化为void*,所以可以使用任意内存,而不用担心类型是否相同

定位new不需要使用delete,因为它本就没有消耗内存。如果buffer是用new开辟的空间,那么可以使用delete删除。

命名空间

  • 通过namespace声明
namespace Jack
{
    douoble pail;
    void fetch();
    int pail;
    struct Node()
    {
        ...
    }
}
namespace Jill
{
    double have(int n)
    {
        
    }
    int slary;
}
  • 命名空间是开放的,可以随时添加。
namespace Jill
{
    char * goose(int age);
}

命名空间的使用

  • 通过使用::作用域访问符使用命名空间中的成员。
  • 通过使用using声明、using编译指令简化使用。
using Jill::slary;
//using声明使得jill中slary可用;
using namespace Jill;
//使得Jill中所有成员可用。
//using编译指令

如果出现了相同名称的变量,通过using声明导入的编译器会报错,

而通过using编译指令导入的,局部变量会覆盖命名空间。

  • 命名空间支持嵌套,或在声明时候使用其他命名空间。
namespace element
{
    namespace fire
    {
        int flame;
        ...
    }
    float water;
    ...
}
element:: fire:: flame = 10;
//使用变量。
namespace myth
{
    using namespace element;
    //任何包含myth的using编译指令都将包含element
    using std:: cout;
    //具有传递性
}
namespace m = myth;
//可以给命名空间起别名。
namespace 
{
    int ice;
    ...
}
//通过省略命名使得其中变量为文件内部链接。
//等价于下面。
static int ice;
...
命名空间使用建议
  1. 减少使用外部 全局变量,而将之放在命名空间中。
  2. 将函数库或者类库放在命名空间中。
  3. 不要在头文件中使用using编译指令。
  4. 首选使用::或者using声明,减少使用using编译指令。
  5. 尽量将using设置为局部作用域。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东风中的蒟蒻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值