“實用性”增加:
C語言中的變量都必須在作用域開始的位置定義!!
C++中更強調語言的“實用性”,所有的變量都可以在需要使用時再定義。
register關鍵字增強:
register關鍵字 請求編譯器讓變量a直接放在寄存器裏面,速度快
在c語言中 register修飾的變量 不能取地址,但是在c++裏面做了內容
1
register關鍵字的變化
register關鍵字請求“編譯器”將局部變量存儲於寄存器中
C語言中無法取得register變量地址(寄存器無法取地址)
在C++中依然支持register關鍵字
C++編譯器有自己的優化方式,不使用register也可能做優化
(比如for循環中的i使用次數很多的話 c++編譯器會自動將i放入寄存器中)
C++中可以取得register變量的地址
2
C++編譯器發現程序中需要取register變量的地址時,register對變量的聲明變得無效。
3
早期C語言編譯器不會對代碼進行優化,因此register變量是一個很好的補充。
變量檢測增強:
在C語言中,重複定義多個同名的全局變量是合法的
在C++中,不允許定義多個同名的全局變量
C語言中多個同名的全局變量最終會被鏈接到全局數據區的同一個地址空間上
int g_var;
int g_var = 1;
C++直接拒絕這種二義性的做法
struct類型加強:
C語言的struct定義了一組變量的集合,C編譯器並不認爲這是一種新的類型
C++中的struct是一個新類型的定義聲明
在C編譯器中 如果不用別名 聲明一個結構體變量 必須加struct 如struct Student s1; c++中聲明不用
C++中所有的變量和函數都必須有類型:
c++中所有的變量和函數必須有類型
c語言中默認類型在c++中是不合法的
f(i)
{
printf("i = %d\n", i);
}
g()
{
return 5;
}
int main(int argc, char *argv[])
{
f(10);
printf("g() = %d\n", g(1, 2, 3, 4, 5));
getchar();
return 0;
}
以上代碼在c編譯器中可以通過的新增Bool類型關鍵字:
C++在C語言的基本類型系統之上增加了bool
C++中的bool可取的值只有true和false
理論上bool只佔用一個字節,
如果多個bool變量定義在一起,可能會各佔一個bit,這取決於編譯器的實現
true代表真值,編譯器內部用1來表示
false代表非真值,編譯器內部用0來表示
bool類型只有true(非0)和false(0)兩個值
C++編譯器會在賦值時將非0值轉換爲true,0值轉換爲false
三目運算符功能增強:
以下代碼在c編譯器中是不行的 但在c++中可以
int main()
{
int a = 10;
int b = 20;
//返回一個最小數 並且給最小數賦值成30
//三目運算符是一個表達式
(a < b ? a : b )= 30;
printf("a = %d, b = %d\n", a, b);
system("pause");
return 0;
}
原因在於:C語言返回變量的值 c++返回變量本身
C語言中的三目運算符返回的是變量值,不能作爲左值使用
C++中的三目運算符可直接返回變量本身,因此可以出現在程序的任何地方
注意:三目運算符可能返回的值中如果有一個是常量值,則不能作爲左值使用
(a < b ? 1 :b )= 30;