C 固有的不可移植特性

2021-10-04 12:05:56 字數 2022 閱讀 4604

為了支援底層程式設計,c++定義了一些固有的不可移植的特性,即因機器而異的特性,當將含有不可移植特性的程式從一台機器轉移到另一台機器上時,通常需要重新編寫該程式。

類可以將其非靜態資料成員定義成位域,在乙個位域中含有一定數量的二進位制位。當乙個程式需要向其他程式或硬體裝置傳遞二進位制資料時,通常會用到位域。位域在記憶體中的布局是與機器相關的且位域的型別必須是整型或列舉型別。

typedef

unsigned

int bit;

class

file

public

:enum modes

; file &

open

(modes)

;void

close()

;void

write()

;bool

isread()

const

;void

setwrite()

;//使用位域

void file::

write()

void file::

close()

//通常使用內建的位運算子操作超過1位的位域

file &file::

open

(file::modes m)

//若乙個類定義了位域成員,則它通常也會定義一組內聯的成員函式來檢查或設定位域的值

inline

bool file::

isread()

const

inline

void file::

setwrite()

volatile關鍵字告訴編譯器不對一些變數進行優化,它能保證對變數位址的穩定訪問。常用於硬體程式、多執行緒中的變數共享等。volatile限定符用法和const相似,起到對型別額外修飾的作用,兩者可同時使用。它們的區別是不能使用合成的拷貝/移動建構函式及賦值運算子初始化volatile物件或從volatile物件賦值。

volatile

int v;

//v是乙個volatile int

int*

volatile x;

//x是乙個volatile指標,指向int

volatile

int*y;

//y是乙個指標,指向volatile int

volatile

int*

volatile z;

//z是乙個volatile指標,它指向乙個volatile int

int*p =

&v;//錯誤,必須使用指向volatile的指標

y =&v;

//正確,y是乙個指向volatile的指標

z =&v;

//正確,z是乙個指向volatile的volatile指標

class

foo

為在c++**中支援c語言**,extern "c"指出按照c語言進行編譯。但要把c++**和其他語言**放在一起,需要有權訪問該語言的編譯器,並且這個編譯器與當前編譯器是相容的。

//單語句鏈結指示

extern

"c" size_t strlen

(const

char*)

;//復合語句鏈結指示

extern

"c"//可以包含標頭檔案,但不能新增在函式內部

extern

"c"class

smallint

;class

bignum

;//c函式可以在c或者c++程式中呼叫,c++函式只能在c++程式中呼叫

extern

"c"double

calc

(double);

extern smallint calc

(const smallint&);

extern bignum calc

(const bignum&

);

references:

固有的不可移植的特徵

位域 當程式需要將二進位制資料傳遞給另乙個程式或硬體裝置的時候,通常使用位域,位域在記憶體中布局是和機器相關的。typedef unsigned int bit class file 作為類的private成員位域只能從成員函式的定義和類的友元訪問。volatile限定符 volatile的確切含義...

軟體固有的複雜性

brooks曾指出 愛因斯坦認為自然界必定存在著簡單的解釋,因為上帝不是反覆無常或隨心所欲的。軟體工程師沒有這樣的信仰來提供安慰。許多必須控制的複雜性是隨心所欲的複雜性。定義軟體的複雜性。軟體確實有較為簡單的軟體,系統簡單,沒有什麼複雜的變化,甚至不需要系統的學習,你就可以寫出乙個和他一樣的軟體或比...

C C 使用異或交換元素及固有的缺點

如下 brief swap 異或交換兩元素 author version 1.0 date 2020 1 4 bug 不能指向同乙個記憶體位址 param in a 輸入a param in b 輸入a return void void swap int a,int b 下面來解釋這段 首先基於兩個...