C 基礎知識001

2021-09-22 02:07:29 字數 4205 閱讀 9657

1、c++簡介

c++是在c語言的基礎上進一步優化而來的,它既可以進行c語 言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行物件導向的程式設計。

2、命名空間:用來避免識別符號命名汙染與命名重複的。

命名空間的定義及使用

// 命名空間:用來避免c語言中的命名衝突

// :: 作用域限定符

// 命名空間的定義

// 命名空間的使用:

// n::a

// using n::a

// using namespace n

namespace n

// 命名空間支援巢狀定義

namespace n

}int main()

注:乙個命名空間就定義了乙個新的作用域,命名空間中的所有內容都侷限於該命名空間中。

3、預設引數:是宣告或定義函式時為函式的引數指定乙個預設值

//  預設引數:不能在函式宣告和定義中同時出現

// 全預設引數:

// 部分預設引數:只能按順序預設

void testfun(int a = 10, int b = 20)

void testfunc(int a, int b)

void testfunc(int a, int b = 10)

注:1. 半預設引數必須從右往左依次來給出,不能間隔著給

2. 預設引數不能在函式宣告和定義中同時出現

3. 預設值必須是常量或者全域性變數

4. c語言不支援(編譯器不支援)

4、函式過載:c++中用來解決功能類似資料型別不同的問題的同名函式。

// 函式過載

// 型別不同

int add(int a, int b)

double add(double a, double b)

// 僅僅返回值型別不同不能構成過載函式

//double add(int a, int b)

// 引數個數不同

int add(double a, int b, float c)

// 型別順序不同

int add(int a, double b, float c)

int main()

// 名字修飾(編譯過程,編譯器為了區分各個函式,將函式通過某種演算法,重新修飾為乙個全域性唯一的名稱

// c語言的名字修飾就是在函式名字前加下劃線,如:_add

// c++的命名修飾比較複雜,不同環境下都是不一樣的

// c++中在函式名前使用extern "c" 可以讓該函式按照c語言風格執行

5、引用:變數的別名,與所引用的變數共用同一塊記憶體空間。

// 引用(相當於乙個別名,與實體共用同一塊記憶體空間,在底層中按照指標方式處理)

//1. 引用在定義時必須初始化

//2. 乙個變數可以有多個引用

//3. 引用一旦引用乙個實體,再不能引用其他實體

// 引用必須與實體型別相同

// 引用作為引數

// 使用傳引用實現兩個數的交換

void swap(int& a, int& b)

// 引用作為函式返回值

// 注意:函式返回後引用的空間就是無效空間了,所以在使用引用作為函式返回值時,返回值的生命週期必須比函式長

////int& add(int a, int b)

int ret;

int& add(int a, int b)

int main()

// 傳值、傳位址、傳引用效率比較

// clock函式用於計算程序時間

#include struct a ;

// 傳值

void func1(a a)

// 傳位址

void func2(a* a)

// 傳引用

void func3(a& a)

void func_time()

size_t finish1 = clock();

// 傳位址

size_t start2 = clock();

for (int i = 0; i < 10000; i++)

size_t finish2 = clock();

// 傳引用

size_t start3 = clock();

for (int i = 0; i < 10000; i++)

size_t finish3 = clock();

// 分別計算兩個函式執行結束後的時間

}int main()

system("pause");

return 0;

}// 對比後發現傳值效率最低,傳位址和傳引用效率差不多

引用和指標的不同點:

1. 引用在定義時必須初始化,指標沒有要求

2. 引用在初始化時引用乙個實體後,就不能再引用其他實體,而指標可以在任何時候指向任何乙個同型別實 體

3. 沒有null引用,但有null指標

5. 引用自加即引用的實體增加1,指標自加即指標向後偏移乙個型別的大小

6. 有多級指標,但是沒有多級引用

7. 訪問實體方式不同,指標需要顯式解引用,引用編譯器自己處理

8. 引用比指標使用起來相對更安全

6、內聯函式:使用inline修飾的函式,無壓棧開銷,可大大提高程式執行效率。

// 內聯函式   inline修飾的函式

// 使用內聯函式可以避免函式壓棧,從而大大提高了程式的執行效率

inline int add(int a, int b)

int main()

注: 

1. inline是一種以空間換時間的做法,省去呼叫函式額開銷。所以**很長或者有迴圈/遞迴的函式不適宜使 用作為內聯函式。

2. inline對於編譯器而言只是乙個建議,編譯器會自動優化,如果定義為inline的函式體內有迴圈/遞迴等 等,編譯器優化時會忽略掉內聯。

巨集的優缺點:

優點: 1.增強**的復用性。

2.提高效能。

缺點: 1.不方便除錯巨集。(因為預編譯階段進行了替換)

2.導致**可讀性差,可維護性差,容易誤用。

3.沒有型別安全的檢查 。

7、c++11中auto關鍵字的使用

// auto 關鍵字    auto宣告的變數必須由編譯器在編譯時期推導而得。

// auto 不能用來修飾函式形參

//void test(auto a)

// auto 與範圍for搭配使用

// 範圍for指的是能夠確定迴圈範圍

void print() ;

int size = sizeof(arr) / sizeof(arr[0]);

for (int i = 0; i < size; i++)

cout << arr[i] << " ";

cout << endl;

for (auto e : arr)

cout << e << " ";

cout << endl;

}int main() ; // auto 不能用來宣告陣列

auto a = 10; // auto 定義的變數必須初始化

auto b = 10, c = 20; // auto 同時定義多個變數時初始化表示式型別必須相同

cout << a << endl;

print();

// c++ 11 中的空指標

auto a = 10;

auto p = &a; // 使用auto 定義指標

auto* p = &a;

auto p = nullptr; // c++中空指標預設使用nullptr

auto& ra = a; // 使用auto 定義引用

ra = 20;

system("pause");

return 0;

}

linux基礎知識001

5 mac不能安裝git ssh 之類。5 配置vim 6 更新軟體源 6 安裝防火牆並開放埠 sudo rm usr bin python第三步 sudo ln s usr bin python3.7 usr bin python比如說安裝 protobuf。安裝3步 configure make...

001 許可權原理基礎知識

只要有使用者參與的系統一般都要有許可權管理,許可權管理實現對使用者訪問系統的控制,按照安全規則或者安全策略控制使用者可以訪問而且只能訪問自己被授權的資源。許可權管理包括使用者認證和使用者 授權兩部分。使用者認證,使用者去訪問系統,系統要驗證使用者身份的合法性。最常用的使用者身份驗證的方法 1 使用者...

python(day001 基礎知識)

1.pip 給python安裝各種程式包。在cmd下輸入pip獲取相關資訊。如果沒有則檢視是否配置環境變數。2.isinstance的用法 print a 1 a hello type a a 1 b hello a b traceback most recent call last file li...