第九章 内存模型和命名空间

2019-03-03  本文已影响0人  鬼枭嗜

#ifndef和#endif

自动化储存持续性

静态储存持续性

线性储存持续性

动态储存持续性

作用域和链接 

如果要为内置的标量类型(例如 int double)分配储存空间并初始化,可在类型名后面加上初始值,并将其用括号括起。

int *pt=new int (6);//将6赋给*pt

这种括号语法也可适用于有合适构造函数的类。然而,要初始化常规结构或数组,需要时有大括号的列表初始化,这要求支持C++11

struct where { double x;double y; double z;}

where *x=new where{3.3,3.3,3.3};

C++11中,还可将列表初始化用于单值变量。

new失败时将引发异常std::bad_alloc。

int *pi=new int;

可以用 int *pt=new(sizeof(int));替代。 如果是数组 则在new()中加入数乘。 delete同理。

定位new运算符。

struct chaff{ char dross[20]; int slag;}

char buffer1[30];

char buffer2[500];

char *p1=new(butter1) chaff

char *p2=new(butter2) int[20]

上述代码从buffer1中分配空间给结构chaff,从buffer2中分配空间给一个包含20个元素的int数组。

名称空间

名称空间可以是全局的,也可以是位于另一个名称空间中,但不能位于代码块中。

::可传递 同时要注意二义性。

未命名的名称空间 提供了链接性为内部的静态变量的替代品。

(完)

上一篇 下一篇

猜你喜欢

热点阅读