1. 程式人生 > >C++ primer plus chapter 8

C++ primer plus chapter 8

怎麽 內存 引號 沒有 內部 地方 new 文件內容 工作

頭文件內容

原型

#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