C 比起C來新增的拓展

2022-02-03 07:01:51 字數 2560 閱讀 8300

在c語言橫行的時代,為了加快執行速度,一些關鍵變數會被放入暫存器中,程式**請求編譯器把變數存入暫存器,然而c語言版的暫存器變數無法通過位址獲得register變數。

c++仍然支援關鍵字register

#include "

iostream

"#include

using

namespace

std;

void

main()

system(

"pause");

}

#include "

iostream

"#include

using

namespace

std;

void

main()

輸出結果:

#include "

iostream

"#include

using

namespace

std;

void

main()

所謂變數檢測的增強就是c++不允許重複宣告變數,而c可以(不過windows下vs2013報錯,因為c/c++一直在避免這種二義性)

c語言中,struct結構是一組變數的集合,不認為它是一種新的型別,說的通俗點

#includestruct

mycoach

;void

main()

c++中

struct

mycoach

;void

main()

一些情況下,struct跟類有異曲同工之妙

#include "

iostream

"#include

using

namespace

std;

struct

mycoach

;void

main()

#include "

iostream

"#include

using

namespace

std;

void

main()

如果多個布林值同時宣告,可能占用乙個bit,取決於編譯器的實現

bool b2,b3,b4;

c語言中,表示式的返回值放到了cpu暫存器裡面,是乙個值(數),而c++返回的是變數的本身
c++

void

main()

然而c語言中

究其原因是c語言返回了b的值,所以(ac++如何做到的?看來是返回了位址......,所以c語言的**不妨修改如下:

#includevoid

main()

輸出結果:

#includeusing

namespace

std;

struct

mycoach

;int opcoach01(mycoach* const

pt)int opcoach02(const mycoach *pt)

輸出結果:

輸出結果:

然而:

#includevoid

main()

這樣一來:

因此在c語言中const是個偽常量;而c++無法這樣修改,因為c++編譯器掃瞄到const型別時,並不像c語言那樣為其分配記憶體,而是放入符號表(一種鍵值對型別的資料結構)

有別於c語言記憶體四區

c++編譯器掃瞄到對常量取位址操作時,為常量分配記憶體空間

或者const變數作為一種全域性變數使用時,也會分配記憶體空間

c++ const型別實現機制

取值時,從符號表裡讀取a對應的變數

執行 p=int(*)&a操作時,另開闢了一塊空間,讓整型指標p指向這塊空間的位址

下列**證實p指向的空間存在

#includeusing

namespace

std;

void

main()

輸出結果:

C 對C的拓展

目錄 一 bool型別關鍵字 二 引用 三 輸入輸出 四 函式引數 五 string類 六 左值 c 在c語言的基礎型別上新增了布林型別 bool bool可取的值有兩個 true false,占用乙個位元組。true代表真值,編譯器內部用1來表示 false代表非真值,編譯器內部用0來表示。inc...

C 於C 的拓展(下)

72 程序 乙個程式的動態執行過程。73 process類 程序類 74 前台程序和後台程序 所有前台程序停止時,後台程序自動停止。75 cpu執行速度快,i o介面速度慢,充分利用cpu完成其他操作的同時,可以開個執行緒給i o介面 比如 鍵盤輸入 76 thread類 常用的兩種過載形式 pub...

C 對C的函式拓展

一,內聯函式 1.內聯函式的概念 c 中的const常量可以用來代替巨集常數的定義,例如 用const int a 10來替換 define a 10。那麼c 中是否有什麼解決方案來替代巨集 片段呢?c 中推薦使用內聯函式代替巨集 片段,c 中使用inline關鍵字宣告內聯函式。注意 內聯函式宣告時...