C++ Primer Plus第九天
单独编译
单独生成 .dll\.lib 在项目程序输出的时候选择生成类型就好了
头文件格式
#ifndef ***
#define ***
//code
#endif
存储持续性、作用域和连接性
自动存储持续性
栈:LIFO;类似弹夹
register int count_fast;将变量存储到CPU寄存器上速度更快
静态存储持续性:static
静态存储区
constexpr:常量表达式的方式
extern: 声明外部链接 在其它文件中使用必须要用它声明一下
cv-限定符:const,volatile
volatile:值可能不定时更新,要从原始的位置读取,而不是读取缓存
mutable:结构体的成员使用了该关键字,则不受const影响
const:(C++中)默认情况下全局链接为外部性质,但const全局变量的链接性为内部:目的是可以在头文件中编写const变量给多数文件使用而不会报错重定义。其它文件要用extern 声明一下
对于函数:外部使用需要加const
static、extern
语言特性:
extern "C" void spiff(int);
extern "C++" void spaff(int);
线程存储持续性:thread_local 并发编程相关
动态存储持续性:new 非 LIFO
C++98:
int *pi = new int(6);
double * pd = new double(99.99);
C++11:
struct where {double x;double y;double z;};
where *one = new where {2.5,5.3,7.2};
int *ar = new int [4] {1,2,3,4};
new失败则:std::bad_alloc异常
new实际上是调用:
void operator new(std::size_t);
void operator new[](std::size_t);
void operator delete(void *);
void operator delete[](void *);
定位(placement)new运算符
new变体:可指定地址 new(已存在的空间 数组啥的) 类型大小
new(number)int[10]
名称空间
语句块:
int i = 11;
int main()
{
int i = 10;
{
int i = 9;
cout << ::i << endl;//输出11
}
return 0;
}
空间:名称空间名字可有可无
name 名称空间名字{
。。。
}
名称空间名字省略的话就相当于 static
using namespace std; using 编译指令
using std::cout; using 声明