C++内存模型和名称空间学习摘要

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

参考书籍:C++ Primer Plus

现在是学java的,c++只用过c部分和stl写算法,不过学校面向对象设计要用C++,看书时发现C++中的static和java中含义相差很多,做一下学习记录。

单独编译

头文件

用于包含结构声明和使用这些结构的函数原型。头文件中常包含的内容:

  1. 函数原型。
  2. #defineconst声明的常量
  3. 结构声明,类声明。
  4. 模板声明
  5. 内联函数

示例

头文件

//my_head.h

#ifndef MY_HEAD_
#define MY_HEAD_

#include<iostream>
#include<string>
struct Person
{
    std::string sex;
    int age;
};

void PersonToString (Person person);

#endif

/*
关于#ifndef MY_HEAD_
	#define MY_HEAD_
	#endif
	用于避免重复包含头文件,编译器首次遇到该文件没有定义MY_HEAD_,进行编译,再次遇到MY_HEAD_已定义,则会跳到#endif之后。
*/

测试文件

test1.cc

#include "my_head.h"
#include<iostream>

void PersonToString (Person person) {
    std::cout<<person.age<<" "<<person.sex<<'\n';
}

test2.cc

#include "my_head.h"

int main() {

    Person person;
    std::cin>>person.age>>person.sex;
    PersonToString(person);
}

编译运行

g++ ./test1.cc ./test2.cc -o test
./test

存储持续性,作用域,链接性

持续存储性

C++中一般使用4种不同的方案存储数据,这些方案的区别在于数据保留在内存中的时间。

1.自动存储持续性

​ 在函数定义中声明的变量(包括函数参数)的存储持续性为自动的。它们在程序开始执行其所属的函数或者代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放。

C++中有两种存储持续性为自动的变量:自动变量、寄存器变量(不常用)。

2.静态存储持续性变量

​ 在函数定义外的变量和使用关键字static定义的变量。它们在程序整个运行过程中都存在。C++中有3中存储持续性为静态的变量。静态无链接性、静态内部链接性、静态外部链接性。

3.动态存储持续性

​ 用new运算符分配的内存将一直存在,直到使用delete运算符将其释放或者程序结束为止。这种内存的存储持续性为动态,有时候被称为自由存储或者堆。

4.线程存储持续性(C++11)

使用thread_local声明的变量生命周期和所属线程一致。

作用域

全局在整个文件有效,局部在代码块内有效等。

链接性

内部链接性:只能在同一文件内使用

外部链接性:可以在不同文件中使用

存储描述持续性作用域链接性如何声明
自动自动代码块在代码块中
静态,无链接性静态代码块在代码块中,使用关键字satic
静态,外部链接性静态文件外部不在任何函数内
静态,内部链接性静态文件内部不在任何函数内,使用关键字static

杂记

关于extern与头文件

https://www.runoob.com/w3cnote/extern-head-h-different.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值