c++内存模型和名称空间

  • 5种变量存储方式
存储描述持续性作用域链接性如何声明
自动存储自动代码块在代码块内
寄存器自动代码块在代码块内,使用关键字register
静态,无链接性静态代码块在代码块内,使用关键字static
静态,外部链接性静态文件外部不在任何函数内
静态,内部链接性静态文件内部不在任何函数内,使用关键字static
  • 静态变量有默认的零初始化

  • 对于静态,外部链接性的变量,只能在一个程序文件里定义,其他文件只能通过extern声明

//file1.cpp
int a=1;

//file2.cpp
extern a;
  • 存储说明符:register, static, extern, thread_local, mutable

  • cv-限定符:constvolatile:即使程序不改变某变量,该变量的值仍可能变化。如硬件改变内存变量

  • mutable:即使某结构变量或类是const,某个成员仍可变

  • const int a=1;:使得a的链接性是内部的,跟static一样。如果希望链接性是外部的,应该extern const int states = 50;。在头文件里考虑这些情况的应用场景

  • 函数的链接性:函数默认是外部链接的。如果希望是内部链接,则

static int go(int a); //定义声明都要加上static

static int go(int a)
{
    ...
}
  • 内联函数不受 单定义 的约束。可以在头文件中定义

  • 动态内存:

int *pi = new int(6);

struct where{int x; int y;};
where *one = new where{1,2};
int[] ar = new int[4] {1,2,3,4};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值