C++ primer plus chapter 8
頭文件內容
原型
#define const 常量
結構聲明
類聲明
模板聲明
內聯函數
<>標準頭文件庫查找
""工作目錄和源代碼目錄 沒有則找標準 自己的頭文件用引號
#ifndef CORDIN_H_
#define CORDIN_H_
#endif 其他地方有相同的定義則跳過
自動存儲 開始函數被創建結束釋放
靜態存儲 整個程序運行過程存在 static
線程存儲 並行任務 放在不同線程中處理 如果 thread_local則聲明和線程一樣長
動態存儲 new 一直在 知道delete 又叫做free store heap(堆)
嵌套內同名聲明 新的hide舊的 比如main 定義了a main內部有個wa函數也定義了a 新的a隱藏舊的a
register int count_fast 寄存器存儲自動變量 提高訪問速度 //現在沒啥用
靜態持續變量(沒有初始化 值為0 0將被強制轉化為合適類型 結構成員也會被初始化0):
外部鏈接 其他文件可用 函數外直接聲明 如 int a =3 常規外部變量有外部連接性 靜態外部變量隱藏常規外部變量
內部 本文件 函數外文件內用static
無連接 當前函數代碼 函數內用static 程序啟動時候初始化 以後調用時候不會再次初始化
這三種這個程序都存在 使用固定內存塊存儲
註意的是 const int finger = 10 是內部的 extern const int finger 但是 extern const int finger = 11 就是外部的了(只有一個文件可以初始化哦).......
violatile 代碼沒有對程序修改 值也可能變化
const 內存初始化後不能再修改
mutable 即是結構CONST 但是某個成員也可以被修改
函數都是靜態的 外部鏈接 你要內部使用則要在定義和原型前加static
單定義規則適用於非內聯函數 程序只能包含一個定義 外部鏈接的話只能有一個程序定義 內聯則不受約束 但是C++要求同一個函數內聯定義要相同
現在程序文件內找 找不到去庫裏找 所以程序員優先而不是庫函數(標準庫程序員不能用)
spff(double,double) C裏面可能就_spff了 而 C++ 可能用_spff_d_d表示
語言連接性 extern "C" void spiff(int) 用C約定來查找
extern "C++" void spaff(int) 用C++約定 ("C++"可以省略)
extern int blem 引用定義 引用已有
extern int blem = 2 聲明定義
函數基本都是外部鏈接
::提供全局變量 如 ::warming采用全局warming 隱藏局部warming
自動內存LIFO 後進先出
動態內存則看怎麽用new和delete (程序結束一般也會被釋放 系統很蠢則不會)
還有塊是靜態變量
int *pi = new int(6) *pi設為6 (C++11 可以用大括號)
double * pd = new double (99.99) *pd設為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] {2,4,6,7};
int * pa = new int[40] 也可以 new(40 * sizeof(int));
delete [ ] pd;
定位運算符
char buff[BUF]
如 pd = new (buffer) double[N] 就會一直用給定的buffer地址
這裏不能用delete
聲明區域 可以在其中聲明的區域 函數外的聲明區域在所在文件 函數則是代碼塊
潛在作用域 潛在作用域從聲明點開始 到聲明區域結尾 被聲明區域包含
名稱弓箭 提供一個聲明區域 一般是全局的
namespace Jack{
double a;
void c();
}
namespace Jill
{float a;
double c;
void c();
} 兩個名稱空間的函數不沖突 可以在另外個文件提供 void c的代碼
namespace Jill{
void c{
...........
}}
usingJill::a 將a添加到聲明區域中 是一個局部變量會覆蓋全局
全部導入(using編譯) 不會報錯 局部會覆蓋空間版本 導入指定(聲明using) 發生沖突時編譯器會報錯
可以嵌套
using a::b::c::d;
可以別名 namspace a =std;
如果沒有名字只能在當前區域使用 不能用using namespace {int a,double b;}
加static 內部鏈接靜態存儲
C++ primer plus chapter 8