2023/9/11
头文件的内容
1.函数原型
2.使用definr或const定义的符号常量
3.结构声明
4.类声明
5.模板声明
6.内联函数
!!!函数定义不要放在头文件里
存储持续性、作用域和链接性
作用域:函数内部局部变量——函数内部声明的变量会在跳出作用域后自动销毁
实参像形参传递的是值,地址不同
关键词extern
不进行空间分配,不进行初始化,在多个文件中使用外部变量会使用。一个文件定义变量,其余文件在变量前加extern声明该变量
静态持续性、内部链接性
static限定符:该变量的链接性为内部。如果想要在两个文件中使用变量名相同的不同变量,可以使用static限定符,不会违反单定义原则。
静态存储持续性、无链接性
static只会初始化一次,比如在函数中写入static限定符的变量只会在第一次调用函数时初始化,后面都不会再次初始化
说明符和限定符
1.mutable:即使结构或类的变量为const,某个特定成员也可以修改
2.const:链接性为内部的全局变量
函数的链接性
1.函数为静态,一般为外部
2.可以使用static将函数设置为内部
存储方案和动态分配
动态内存的分配和释放顺序取决于new和delete何时以何种方式被使用
int *pi = new int(1);
int *pii = new int{2}; // 也可以使用大括号
double *pd = new double[4]{1.1, 2.2, 3.3, 4.4}; // 分配数组
struct a
{
int d;
double c;
char h;
};
a *one = new a{1, 23.23, 'c'}; // 分配结构
定位new运算符(需要包含头文件new)
struct chaff
{
char d[20];
int s;
};
char buffer1[50];
char buffer2[500];
int main()
{
chaff *p1;
int *p2;
p1 = new (buffer1) chaff;
p2 = new (buffer2) int[20];//定位new,使用程序给buffer2分配的空间(即地址)
}
名称空间(namespace)
同一范围内重复定义会报错:
using Mizuki::i;
using namespace Mostima;
int i = 1; //错误,不能再次定义i
Mostima::i = 3;
Mizuki::i = 2;