99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

Linux兵工廠
認證:普通會員
所在專題目錄 查看專題
C++必知必會之基礎知識-常用關鍵字(1)
C++必知必會之基礎知識-常用關鍵字(2)
C++必知必會之基礎知識-常用關鍵(3)
C++基礎知識精髓
C++ 關鍵字constexpr
作者動態 更多
C語言中宏展開規則,你知多少?
04-22 13:41
DeepSeek對嵌入式軟件行業的分析
04-18 10:15
openssl:一個開源的安全套接字層加密庫
04-17 09:09
記錄一次RK3399移植GDB16.2
04-16 09:21
std::thread底層實現原理
04-15 14:11

C++必知必會之基礎知識-常用關鍵字(1)

大家好,我是Linux兵工廠,在工作經常發現小伙伴們遇到一些C++的問題都是對基礎知識不熟悉或理解混亂所導致的。正所謂萬丈高樓平地起,作為一名合格的程序員來說,沒有良好的基本功很難達到一定的高度。而工作中大部分編程問題都是基本功不扎實所導致,所以決定花些時間來整理C++相關的基本知識和基本概念供大家參考理解,每一個知識點都結合相關的代碼進行驗證。本文基本上涵蓋了C++最常用的知識點,希望對小伙伴們有所幫助。
關注公眾號:Linux兵工廠,領取海量Linux免費學習資料,且會不定時輸出更多干貨知識。
C/C++首先我們先來了解一下修飾符的定義。
修飾符在C/C++中,修飾符(modifiers)是用于修改基本數據類型的關鍵字,用于改變變量的存儲方式、作用域或其他特性。
1. const
const關鍵字是一種修飾符。就 const 修飾符而言,它用來告訴編譯器,被修飾的這些部分的特點具有只讀屬性。在編譯的過程中,一旦編寫代碼試圖去改變這些部分,編譯器就會給出錯誤提示。防止編程中出現語法及邏輯的錯誤,提高代碼的健壯性及規范性。
- 修飾變量
說明該變量不可以被改變0
- 修飾指針
分為指向常量的指針和指針常量
- 修飾引用
常量引用,經常用于形參類型,即避免了拷貝,又避免了函數對值的修改
- 修飾成員函數
說明該成員函數內不能修改成員變量
//類
class Test
{
public:
    Test() : a(0) { };       // 初始化參數列表
    Test(int x) : a(x) { };  // 初始化參數列表
    int getV();              // 普通成員函數
    int getV() const;        // 常成員函數,不得修改類中的任何數據成員的值
private:
    const int a;             // 常對象成員,只能在初始化列表賦值
};
void Func()
{
    Test b;                  // 普通對象,可以調用全部成員函數
    const Test a;            // 常對象,只能調用常成員函數,修改常成員變量
    const Test *p = &a;      // 常指針
    const Test &q = a;       // 常引用
    // 如果const位于星號*的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;
    // 如果const位于星號的右側,const就是修飾指針本身,即指針本身是常量。
    const int* a;          // 常量指針 指針指向的常量不可修改
    int const *a;          // 常量指針 指針指向的常量不可修改(同上)
    int* const a;          // 指針常量 指針不可修改
    const int* const;      // 常量指針常量 指針和指向的常量都不可修改
    // 引用 引用a不能被修改
    int x;
    int const &a=x;
    const int &a=x;
}
2. static
static關鍵字常用于修飾變量和函數
- 修飾普通變量
修改變量的存儲區域和生命周期,使變量存儲在靜態存儲區,在 main函數運行前就分配了空間,如果有初始值就用初始值初始化它,如果沒有初始值系統用默認值初始化它。
- 修飾普通函數
表明函數的作用范圍,僅在定義該函數的文件內才能使用。在多人開發項目時,為了防止與他人命名空間里的函數重名,可以將函數定位為 static。
- 修飾成員變量
修飾成員變量使所有的對象只保存一個該變量,而且不需要生成對象就可以訪問該成員。
- 修飾成員函數
修飾成員函數使得不需要生成對象就可以訪問該函數,但是在 static 函數內不能訪問非靜態成員。
在函數內部使用static關鍵字聲明的變量是靜態變量,它在程序的生命周期內保持其值,不會在每次函數調用時重新初始化。靜態變量存儲在靜態數據區,而不是棧上。當一個靜態變量在函數內部聲明時,它會在程序運行時初始化并保留其值。
#include <iostream>
void functionWithStatic() {
    static int count = 0; // 靜態變量,在多次調用該函數時,count的值保留
    count++;
    std::cout << "Static count: " << count << std::endl;
}
int main() {
    functionWithStatic(); // 輸出 Static count: 1
    functionWithStatic(); // 輸出 Static count: 2
    functionWithStatic(); // 輸出 Static count: 3
    return 0;
}
在C/C++中,使用static關鍵字在類中聲明的成員函數被稱為靜態函數,也稱為類的靜態成員函數。靜態函數與類的實例無關,可以直接通過類名調用,而無需通過對象。
class MyClass {
public:
    static void staticFunction() {
        std::cout << "This is a static function." << std::endl;
    }
};
int main() {
    MyClass::staticFunction(); // 直接通過類名調用靜態函數
    MyClass obj;
    obj.staticFunction(); // 也可以通過對象調用靜態函數,但不是推薦做法
    return 0;
}
在類中使用static關鍵字聲明的數據成員被稱為靜態數據成員,它屬于類本身,而不是類的實例。靜態數據成員在所有類的實例之間共享,類的所有對象共享同一個靜態數據成員。
class MyClass {
public:
    static int staticData; // 靜態數據成員的聲明
};
int MyClass::staticData = 42; // 靜態數據成員的定義和初始化
int main() {
    MyClass obj1;
    MyClass obj2;
    obj1.staticData = 10;
    std::cout << "obj1.staticData: " << obj1.staticData << std::endl; // 輸出 obj1.staticData: 10
    std::cout << "obj2.staticData: " << obj2.staticData << std::endl; // 輸出 obj2.staticData: 10
    return 0;
}
在文件中使用static關鍵字聲明的全局變量(位于函數外部)具有文件作用域,它們只在聲明它們的文件中可見,不會被其他文件訪問。這些靜態變量不能被其他文件直接訪問,因此在不同文件中使用相同名稱的靜態變量不會造成命名沖突。
// File1.cpp
static int file1StaticVar = 10;
// File2.cpp
static int file2StaticVar = 20;
以上是static關鍵字在C/C++中的常見用法。請注意,使用static關鍵字的具體含義可能會因上下文而異,因此應根據具體情況理解和使用。
3. this指針
在C++中,this指針是一個特殊的指針,它是一個隱藏的指針,指向當前對象(即正在調用該成員函數的對象)。this指針在成員函數內部自動創建,可以在成員函數中使用,用于訪問當前對象的成員變量和成員函數。
this指針是一個隱式參數,它并不需要顯式地傳遞,編譯器會在調用成員函數時自動傳遞它。
以下是關于this指針的一些詳細解釋:
- this指針的類型
  this指針的類型是指向當前類對象的指針,它的類型是指向當前類的常量指針(const指針)。這是因為在成員函數中,不能通過this指針來修改當前對象的值,以保證成員函數的const屬性能夠得到維持。
- this指針的用途
  在成員函數中,使用this->可以訪問當前對象的成員變量和成員函數,以區分成員變量和函數參數的命名沖突。
  在類的靜態成員函數中,沒有this指針,因為靜態成員函數不依賴于特定的對象。
- this指針的使用場景
  當成員函數中的參數和成員變量同名時,使用this指針可以明確指示成員變量。
  在類的方法鏈式調用中,返回this指針可以使調用更加簡潔。
下面是一個示例代碼,演示了this指針的用法:
#include <iostream>
class MyClass {
public:
    int x;
    MyClass(int x) : x(x) {}
    void printX() {
        std::cout << "x = " << this->x << std::endl;
    }
    MyClass& increment() {
        this->x++;
        return *this;
    }
};
int main() {
    MyClass obj(10);
    obj.printX(); // 輸出 x = 10
    obj.increment().increment().increment();
    obj.printX(); // 輸出 x = 13
    return 0;
}
在上述示例中,this指針用于訪問成員變量x,并在方法鏈式調用中返回了當前對象的引用。這樣可以連續調用increment()函數,并對成員變量x進行遞增操作。
總之,this指針在C++中是一個非常有用的特性,它使得在成員函數中能夠輕松訪問當前對象的成員,并提供了便捷的方式來實現方法鏈式調用。
4. inline內聯函數
在C++中,inline是一個關鍵字,用于對函數進行內聯展開。使用inline關鍵字聲明的函數被稱為內聯函數。內聯函數的主要目的是減少函數調用的開銷,通過在函數調用點展開函數代碼,可以避免函數調用的額外開銷,從而提高程序的執行效率。
以下是內聯函數的一些特點和注意事項:
定義:內聯函數通常在類定義中聲明,也可以在函數定義時加上inline關鍵字。例如:
// 在類定義中聲明內聯函數
class MyClass {
public:
    inline void foo();
};
// 在函數定義時聲明內聯函數
inline void MyClass::foo() {
    // 函數代碼
}
- 編譯器決策:inline關鍵字只是向編譯器發出了一個請求,請求將函數內容內聯到調用點。編譯器會自行決定是否真正內聯展開函數代碼,它可能會考慮函數的復雜性、調用頻率等因素來作出最優的決策。
- 適用場景:內聯函數對于短小且頻繁調用的函數效果最好,而對于復雜的函數或大量邏輯的函數可能并不適合內聯。適當地使用內聯函數可以提高性能,但濫用內聯可能會導致代碼膨脹,增加可執行文件的大小。
- 定義位置:通常將內聯函數的定義放在頭文件中,因為在每個調用點都需要展開函數代碼,編譯器需要知道函數的實現細節。
- 不支持遞歸:內聯函數不支持遞歸調用,因為遞歸調用無法在調用點展開。
- 靜態成員:類中的靜態成員函數默認是內聯的,即使沒有顯式使用inline關鍵字。
使用內聯函數的示例:
class MathUtil {
public:
    inline static int add(int a, int b) {
        return a + b;
    }
};
int main() {
    int result = MathUtil::add(5, 3);
    return 0;
}
在上述示例中,add函數被聲明為內聯靜態函數。在調用MathUtil::add(5, 3)時,編譯器會嘗試在調用點展開add函數的代碼,從而減少函數調用的開銷。
需要注意的是,雖然內聯函數可以提高性能,但并不是所有的函數都適合內聯。適當地使用內聯函數是一種優化手段,應該根據實際情況和性能測試來決定是否使用內聯。
聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 5
收藏 5
關注 37
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 蜜桃免费在线视频 | 乱码视频午夜在线观看 | 天天做天天爱夜夜爽毛片L 国产精久久久久久 | 夜福利视频 | 15p亚洲 | 国产精品s房调教打屁股 | 不卡成人 | 免费福利在线观看 | 欧美生活1级 | 成人av在线大片 | 青天衙门高清第一部免费观看 | wwwxx黄色| 深夜国产一区二区三区在线看 | 国产精品福利自产拍在线观看 | 色香蕉久久 | 中文字幕欧美日韩一区 | 日韩欧美在线综合 | 欧美色图bt | 国产成人午夜片在线观看高清观看 | 91琪琪 | 亚洲成人综合网站 | 久久久久久在线观看 | 国产网址视频 | 国产永久视频 | 免费人成视频网站在线18 | 日韩成人在线免费视频 | 久久精品精品 | 免费吃奶摸下激烈视频青青网 | 精品无码国模私拍视频 | 国产成人精品日本亚洲第一区 | 91免费观看在线 | 人人妻人人妻人人片av | 九九福利视频 | 成人国产精品一区在线观看播放 | 青青草91久久久久久久久 | 国产猛男猛女无遮无掩 | 91精品久久久 | 国产午夜日韩不卡一区 | 美女精品国产 | 国产一级黄色片免费 | 清纯唯美经典一区二区 |