c++基础—— 内存与名称空间

1、头文件

“”;作用:编译器首先查找当前的工作目录或者源代码目录;没找到才去标准位置找
();在存储标准头文件的文件系统中找

自己写的,用"";

2、变量的作用域、持续性、连接性

简而言之,在哪里有效,什么时候销毁内存

//局部变量
void funct1()
{ int i=0; //函数调用后被释放
  static int m=0;//仅当执行该函数时有效,内存在程序结束前都有效
  extern int b=9;//作用域;函数内;外面无法调用
}
//全局变量
函数外申明
int a1=9;//== extern int a1=9;作用域:整个文件;为引用一个a1,同地址、同内存
//其他文件调用,需要申明  extern int a1;(eg:下面的举例代码)
static int a=9;//作用于当前文件,其他文件没法调用
int main()
{
 return 0;
}
//主程序
#include <iostream>
//#include "test.h"
extern float globel;
void funt1();
int main()
{    std::cout << "Hello World!\n";
	globel = 2;
	std::cout << globel<<"\n";
	funt1();
	std::cout << globel << "ij\n";}
void funt1()
{	extern float globel;
	extern float glo;
	globel += 20;
	std::cout << globel << "\n";}
//目标变量 在.h中被申明
"test.h"
float globel=100;
static int one_file = 50;
void funct1();
void funct2();

c++primer 建议少用全局变量; 减少对数据进行不必要的访问。应该使用oop。

3、说明符和限定符

说明符

static 内部链接性,作用整个文件(单一);静态的
extern 外部链接性,作用多个文件;静态的
普通的int等 能够被类保留或者作为局部变量,而上述两个则是全局存在的,作用范围https://zhidao.baidu.com/question/19318340.html
mutable ; 使他修饰的变量,允许被更改,忽略之前的限定

限定符

const ,限定变量或者结构体不能被更改
volatile , 硬件更改了某块内存的 数据,编译器 就有可能缓存数据;申明后,编译器不在优化。

4、static在类中申明

申明文件.h
class str
{
private:
	char *strr;//字符指针
	int len;//字符长度
	static int num_strings; //不能赋值
}
初始化文件.cpp
int str::num_strings = 0;
//初始化静态函数成员
//在外部初始化
str::str()
{
	len = 4;
	strr = new char[len];
	strcpy_s(strr,4,"c++");
	num_strings++;

	std::cout << "default obj created" << "\n";
}

在类中声明 static 需要在类的外面 定义一下 变量(或者其他)等;因为static不属于类,所以不能在 声明时给定值

class a{
static int w;
static int doit(){return w*2};//静态函数只能 处理静态数据,因为生命周期不一致
}
int a::w=20;//可以 给定值也可以不用给定// 申请内存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值