c amp cpp常見問題

2021-04-24 17:09:16 字數 3615 閱讀 8629

static函式與普通函式有什麼區別?

如果乙個函式只能被本檔案中其他函式所呼叫,它稱為內部函式。內部函式又稱為靜態函式。

對於可在當前原始檔以外使用的函式,應該在乙個標頭檔案中說明,要使用這些函式的原始檔要包含這個標頭檔案。

//static全域性變數與普通的全域性變數有什麼區別?

全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。 

這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式, 當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。 而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用, 因此可以避免在其它原始檔中引起錯誤。從以上分析可以看出, 把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域,

限制了它的使用範圍。//

在c++ 

程式中呼叫被

c編譯器編譯後的函式,為什麼要加

extern 「c」

?c++

語言支援函式過載,

c語言不支援函式過載。函式被

c++編譯後在庫中的名字與

c語言的不同。

假設某個函式的原型為:

void foo(int x, int y);

該函式被

c編譯器編譯後在庫中的名字為

_foo,而

c++編譯器則會產生像

_foo_int_int

之類的名字。

c++提供了

c連線交換指定符號

extern「c

」來解決名字匹配問題。

程式設計師用鏈結指示符linkage directive 告訴編譯器該函式是用其他的程式語言

編寫的鏈結指示符有兩種形式既可以是單一語句single statement 形式也可以是復

合語句compound statement 形式

// 單一語句形式的鏈結指示符

extern "c" void exit(int);

// 復合語句形式的鏈結指示符

extern "c"

// 復合語句形式的鏈結指示符

extern "c"

語言提供的鏈結指示extern "c" extern "c"是惟一被

保證由所有c++實現都支援的每個編譯器實現都可以為其環境下常用的語言提供其他鏈結

指示例如extern "ada"可以用來宣告是用ada 語言寫的函式extern "fortran"用來

宣告是用fortran 語言寫的函式等等因為其他的鏈結指示隨著具體實現的不同而不同

//@font-face @font-face @font-face @font-face @font-face @font-face @font-face @font-face @font-face p.0 div.section0

要使引用pr代表變數「char *p」,則pr的初始化語句為

@font-face @font-face @font-face @font-face @font-face @font-face @font-face @font-face @font-face p.0 div.section0

char * &pr = p; //

@font-face @font-face @font-face @font-face @font-face @font-face @font-face @font-face @font-face p.0 div.section0

if/else/return 的使用方法 

if(condition)    可以等價為  return (condition?x:y);   

else   

//@font-face @font-face @font-face @font-face @font-face @font-face @font-face @font-face @font-face p.0 div.section0

#define c語言 

const  c語言 c++語言 

const常量有資料型別,編譯器會進行型別安全檢查,而#define沒有資料型別, 

const的常量可以進行除錯,但巨集常量不能進行除錯.  //

@font-face @font-face @font-face @font-face @font-face @font-face @font-face @font-face @font-face p.0 div.section0

const的使用方法 

在全域性定義 const float pi=3.1415926 

在類中定義 

class a  ; 

a::a(int size):size(size)   

對引數和函式的定義(const只能修飾輸入引數,不能修飾輸出引數) 

const int x=1;  表示x的值是1,在程式中不能改變; 

const int* x;  表示x代表的位址所指向的內容是不能改變得; 

int const* x;  與const int* x;的表示的意思一樣; 

int * const x;  表示x代表的位址是不能改變的; 

當是輸入引數時,不需要是void func(const int i),void func(const int& i),可以是void func(int i) 

因為輸入引數採用"值傳遞"(const int i),由於函式將自動產生臨時變數用於複製該引數,該輸入引數本來

就無需保護,所以不要加const修飾; 

不用const int& i的原因在於內部資料型別的引數不存在構造、析構的過程,而複製也非常快,

"值傳遞"和"引用傳遞"的效率幾乎相當. 

當是輸入引數時,不需要是void func(const a a),void func(a a),可以是void func(a& a)

或void func(const a& a) 

不用const a a,a a的原因是函式的效率比較低,因為函式體內將產生a型別的臨時物件用於複製引數a,

而臨時物件的構造、複製和析構過程都需要消耗時間 

最好用const a&a的原因是a&a中的a可以被改變,a&a和const a&a的好處在於都不會產生臨時物件,效率高;

@font-face @font-face @font-face @font-face @font-face @font-face @font-face @font-face @font-face p.0 div.section0

const a func(const a&a )const的好處 

第乙個const表示返回的是個內部產生的物件,它不能被修改 

const a func(...)   

const a a=func(...);//不能是a a=func(...); 

第二個const表示輸入的引數是引用傳遞,函式內部不會產生臨時物件,而且這個物件不能被內部修改 

第三個const表示此函式內部的所涉及的資料成員不能修改 

class stack   

int stack::getcount(void) const   

常見問題 朗動常見問題

常見問題一 方向盤變沉 檢查胎壓是否正常,輪胎是否過度磨損。助力幫浦不工作,前輪氣壓低。冬天的話,冷車在冬天助力油比較稠,方向會重一點。檢查轉向助力油。1 應該是是助力系統有問題或則助力潤滑油有問題。2 如果你在駕車時感覺方向盤變緊,汽車偏向一側,需要檢查輪胎,或進行車輪平衡 定位。在這些問題剛剛發...

面試常見問題 1 this的常見問題

this 的含義 this關鍵字是乙個非常重要的語法點。毫不誇張地說,不理解它的含義,大部分開發任務都無法完成。前一章已經提到,this可以用在建構函式之中,表示例項物件。除此之外,this還可以用在別的場合。但不管是什麼場合,this都有乙個共同點 它總是返回乙個物件。簡單說,this就是屬性或方...

Spring常見問題

1 利用spring框架程式設計,console列印出log4j warn please initialize the log4j system properly?lupa開源社群 u i w.d t 說 明你的log4j.properties沒有配置。請把log4j.properties放到工程的...