4.1namespace命名空間
1:什麼是namespace命名空間
所謂namespace,是指識別符號的各種可見範圍。c++標準程式庫中的所有識別符號都被定義於乙個名為std的namespace中,更好地控制識別符號的作用域。2:
和的不同
1)當使用時,相當於在c中呼叫庫函式,使用的是全域性命名空間,也就是早期的c++實現;
2)當使用的時候,該標頭檔案沒有定義全域性命名空間,必須使用namespace std;這樣才能正確使用cout
3:namespace三種使用方式:
1、直接指定識別符號。
例如std::ostream而不是ostream。完整語句如下:std::cout << std::hex << 3.4 << std::endl;
2、使用
using
關鍵字。
using std::cout;using std::endl; using std::cin; 以上程式可以寫成 cout << std::hex << 3.4 << endl;
3、最方便的就是使用
using namespace std;
例如: using namespace std;這樣命名空間std內定義的所有識別符號都有效(**)。就好像它們被宣告為全域性變數一樣。那麼以上語句可以如下寫: cout <
c中的命名空間
在c語言中只有乙個全域性作用域
c語言中所有的全域性識別符號共享同乙個作用域
識別符號之間可能發生衝突
c++中提出了命名空間的概念
命名空間將全域性作用域分成不同的部分
不同命名空間中的識別符號可以同名而不會發生衝突
命名空間可以相互巢狀
全域性作用域也叫預設命名空間
namespace namespacea
namespace namespaceb; }
}int main()
; printf("t1.name = %s\n", t1.name);
printf("t1.age = %d\n", t1.age);
system("pause");
return 0;
}
結論
1) 當使用的時候,該標頭檔案
沒有定義全域性命名空間,必須使用namespace std;這樣才能正確使用cout。若不引入using namespace std ,需要這樣做。std::cout。
2) c++標準為了和c區別開,也為了正確使用命名空間,規定標頭檔案
不使用字尾.h。
3) c++命名空間的定義: namespacename
4) using namespace namespacea;
5) namespce定義可巢狀。
4.2register關鍵字增強
#includeusing namespace std;
/*struct型別的加強:
c語言的struct定義了一組變數的集合,c編譯器並不認為這是一種新的型別
c++中的struct是乙個新型別的定義宣告
*///struct 和class關鍵字 完成的功能是一樣的
struct teacher
;int main()
4.3
「實用性」增加
變數什麼時候使用,什麼時候定義------隨用隨定義
#include "iostream"
using namespace std;
//c語言中的變數都必須在作用域開始的位置定義!!
//c++中更強調語言的「實用性」,所有的變數都可以在需要使用時再定義。
//隨用隨定義
int main11()
4.3 register關鍵字增強
//register關鍵字 請求編譯器讓變數a直接放在暫存器裡面,速度快
//在c語言中 register修飾的變數 不能取位址,但是在c++裡面做了內容
//1register關鍵字的變化
register關鍵字請求「編譯器」將區域性變數儲存於暫存器中
c語言中無法取得register變數位址
在c++中依然支援register關鍵字
c++編譯器有自己的優化方式,不使用register也可能做優化
c++中可以取得
register
變數的位址
//2c++編譯器發現程式中需要取register變數的位址時,register對變數的宣告變得無效。
//3早期c語言編譯器不會對**進行優化,因此register變數是乙個很好的補充。
#includeusing namespace std;
/*struct型別的加強:
c語言的struct定義了一組變數的集合,c編譯器並不認為這是一種新的型別
c++中的struct是乙個新型別的定義宣告
*///struct 和class關鍵字 完成的功能是一樣的
struct teacher
;int main()
4.4 變數檢測增強
#includeusing namespace std;
/*在c語言中,重複定義多個同名的全域性變數是合法的
在c++中,不允許定義多個同名的全域性變數
int g_var;
int g_var = 1;
c++直接拒絕這種二義性的做法。
*///int g_a;
int g_a = 10;//在c編譯器當中列印的時候會是直接是10,c++會報錯檢測增強了
int main()
4.5 c++中所有的變數和函式都必須有型別
總結:在c語言中
intf( );表示返回值為int,接受任意引數的函式
intf(void);表示返回值為int的無參函式
在c++中
intf( );和int f(void)具有相同的意義,都表示返回值為int的無參函式
c++更加強調型別,任意的程式元素都必須顯示指明型別
4.6 新增bool型別關鍵字
#includeusing namespace std;
/*c++中的布林型別
c++在c語言的基本型別系統之上增加了bool
c++中的bool可取的值只有true和false
理論上bool只占用乙個位元組,
如果多個bool變數定義在一起,可能會各佔乙個bit,這取決於編譯器的實現
true代表真值,編譯器內部用1來表示
false代表非真值,編譯器內部用0來表示
bool型別只有true(非0)和false(0)兩個值
c++編譯器會在賦值時將非0值轉換為true,0值轉換為false
*/int main()
傳智播客mysql分頁的實現 傳智播客 分頁
整理了一宿,終於找到了頭緒,在頭腦還算清醒時,整理下分頁的筆記.我這個分頁用的是oracle的資料庫.他在查詢時涉及到了乙個偽列.table名為 employees.建立bean物件employee.屬性如下 private int employee id private string first ...
給傳智播客的乙份感謝信
我是一名從傳智播客培訓機構出來的學員,這是我寫給咱們傳智播客學校的乙份感謝信。感謝傳智播客對我的栽培,讓我的人生從此改變,得到乙個新的世界,讓我有了一對能夠飛翔的翅膀。我不是一名大學生,我是乙個你們想不到的初中生,而且學習還很不好的那種,不上學之後我就一直在打工,直到有一天我朋友跟我介紹說來咱們傳智...
傳智播客C語言提高 記憶體四區
知識點 記憶體四區的建立流程 流程說明 1 作業系統把物理硬碟 load到記憶體 2 作業系統把c 分成四個區 3 作業系統找到main函式入口執行 記憶體四區的建立流程 如果兩個靜態變數的值一樣,在c 中編譯器會自動優化,將兩個變數的位址搞成一樣的 棧的開口方向可以測試出來,測試release和d...