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

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

C++必知必會(huì)之基礎(chǔ)知識(shí)-常用關(guān)鍵字(1)

大家好,我是Linux兵工廠,在工作經(jīng)常發(fā)現(xiàn)小伙伴們遇到一些C++的問題都是對(duì)基礎(chǔ)知識(shí)不熟悉或理解混亂所導(dǎo)致的。正所謂萬丈高樓平地起,作為一名合格的程序員來說,沒有良好的基本功很難達(dá)到一定的高度。而工作中大部分編程問題都是基本功不扎實(shí)所導(dǎo)致,所以決定花些時(shí)間來整理C++相關(guān)的基本知識(shí)和基本概念供大家參考理解,每一個(gè)知識(shí)點(diǎn)都結(jié)合相關(guān)的代碼進(jìn)行驗(yàn)證。本文基本上涵蓋了C++最常用的知識(shí)點(diǎn),希望對(duì)小伙伴們有所幫助。
關(guān)注公眾號(hào):Linux兵工廠,領(lǐng)取海量Linux免費(fèi)學(xué)習(xí)資料,且會(huì)不定時(shí)輸出更多干貨知識(shí)。
C/C++首先我們先來了解一下修飾符的定義。
修飾符在C/C++中,修飾符(modifiers)是用于修改基本數(shù)據(jù)類型的關(guān)鍵字,用于改變變量的存儲(chǔ)方式、作用域或其他特性。
1. const
const關(guān)鍵字是一種修飾符。就 const 修飾符而言,它用來告訴編譯器,被修飾的這些部分的特點(diǎn)具有只讀屬性。在編譯的過程中,一旦編寫代碼試圖去改變這些部分,編譯器就會(huì)給出錯(cuò)誤提示。防止編程中出現(xiàn)語法及邏輯的錯(cuò)誤,提高代碼的健壯性及規(guī)范性。
- 修飾變量
說明該變量不可以被改變0
- 修飾指針
分為指向常量的指針和指針常量
- 修飾引用
常量引用,經(jīng)常用于形參類型,即避免了拷貝,又避免了函數(shù)對(duì)值的修改
- 修飾成員函數(shù)
說明該成員函數(shù)內(nèi)不能修改成員變量
//類
class Test
{
public:
    Test() : a(0) { };       // 初始化參數(shù)列表
    Test(int x) : a(x) { };  // 初始化參數(shù)列表
    int getV();              // 普通成員函數(shù)
    int getV() const;        // 常成員函數(shù),不得修改類中的任何數(shù)據(jù)成員的值
private:
    const int a;             // 常對(duì)象成員,只能在初始化列表賦值
};
void Func()
{
    Test b;                  // 普通對(duì)象,可以調(diào)用全部成員函數(shù)
    const Test a;            // 常對(duì)象,只能調(diào)用常成員函數(shù),修改常成員變量
    const Test *p = &a;      // 常指針
    const Test &q = a;       // 常引用
    // 如果const位于星號(hào)*的左側(cè),則const就是用來修飾指針?biāo)赶虻淖兞浚粗羔樦赶驗(yàn)槌A浚?    // 如果const位于星號(hào)的右側(cè),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關(guān)鍵字常用于修飾變量和函數(shù)
- 修飾普通變量
修改變量的存儲(chǔ)區(qū)域和生命周期,使變量存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū),在 main函數(shù)運(yùn)行前就分配了空間,如果有初始值就用初始值初始化它,如果沒有初始值系統(tǒng)用默認(rèn)值初始化它。
- 修飾普通函數(shù)
表明函數(shù)的作用范圍,僅在定義該函數(shù)的文件內(nèi)才能使用。在多人開發(fā)項(xiàng)目時(shí),為了防止與他人命名空間里的函數(shù)重名,可以將函數(shù)定位為 static。
- 修飾成員變量
修飾成員變量使所有的對(duì)象只保存一個(gè)該變量,而且不需要生成對(duì)象就可以訪問該成員。
- 修飾成員函數(shù)
修飾成員函數(shù)使得不需要生成對(duì)象就可以訪問該函數(shù),但是在 static 函數(shù)內(nèi)不能訪問非靜態(tài)成員。
在函數(shù)內(nèi)部使用static關(guān)鍵字聲明的變量是靜態(tài)變量,它在程序的生命周期內(nèi)保持其值,不會(huì)在每次函數(shù)調(diào)用時(shí)重新初始化。靜態(tài)變量存儲(chǔ)在靜態(tài)數(shù)據(jù)區(qū),而不是棧上。當(dāng)一個(gè)靜態(tài)變量在函數(shù)內(nèi)部聲明時(shí),它會(huì)在程序運(yùn)行時(shí)初始化并保留其值。
#include <iostream>
void functionWithStatic() {
    static int count = 0; // 靜態(tài)變量,在多次調(diào)用該函數(shù)時(shí),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關(guān)鍵字在類中聲明的成員函數(shù)被稱為靜態(tài)函數(shù),也稱為類的靜態(tài)成員函數(shù)。靜態(tài)函數(shù)與類的實(shí)例無關(guān),可以直接通過類名調(diào)用,而無需通過對(duì)象。
class MyClass {
public:
    static void staticFunction() {
        std::cout << "This is a static function." << std::endl;
    }
};
int main() {
    MyClass::staticFunction(); // 直接通過類名調(diào)用靜態(tài)函數(shù)
    MyClass obj;
    obj.staticFunction(); // 也可以通過對(duì)象調(diào)用靜態(tài)函數(shù),但不是推薦做法
    return 0;
}
在類中使用static關(guān)鍵字聲明的數(shù)據(jù)成員被稱為靜態(tài)數(shù)據(jù)成員,它屬于類本身,而不是類的實(shí)例。靜態(tài)數(shù)據(jù)成員在所有類的實(shí)例之間共享,類的所有對(duì)象共享同一個(gè)靜態(tài)數(shù)據(jù)成員。
class MyClass {
public:
    static int staticData; // 靜態(tài)數(shù)據(jù)成員的聲明
};
int MyClass::staticData = 42; // 靜態(tài)數(shù)據(jù)成員的定義和初始化
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關(guān)鍵字聲明的全局變量(位于函數(shù)外部)具有文件作用域,它們只在聲明它們的文件中可見,不會(huì)被其他文件訪問。這些靜態(tài)變量不能被其他文件直接訪問,因此在不同文件中使用相同名稱的靜態(tài)變量不會(huì)造成命名沖突。
// File1.cpp
static int file1StaticVar = 10;
// File2.cpp
static int file2StaticVar = 20;
以上是static關(guān)鍵字在C/C++中的常見用法。請(qǐng)注意,使用static關(guān)鍵字的具體含義可能會(huì)因上下文而異,因此應(yīng)根據(jù)具體情況理解和使用。
3. this指針
在C++中,this指針是一個(gè)特殊的指針,它是一個(gè)隱藏的指針,指向當(dāng)前對(duì)象(即正在調(diào)用該成員函數(shù)的對(duì)象)。this指針在成員函數(shù)內(nèi)部自動(dòng)創(chuàng)建,可以在成員函數(shù)中使用,用于訪問當(dāng)前對(duì)象的成員變量和成員函數(shù)。
this指針是一個(gè)隱式參數(shù),它并不需要顯式地傳遞,編譯器會(huì)在調(diào)用成員函數(shù)時(shí)自動(dòng)傳遞它。
以下是關(guān)于this指針的一些詳細(xì)解釋:
- this指針的類型
  this指針的類型是指向當(dāng)前類對(duì)象的指針,它的類型是指向當(dāng)前類的常量指針(const指針)。這是因?yàn)樵诔蓡T函數(shù)中,不能通過this指針來修改當(dāng)前對(duì)象的值,以保證成員函數(shù)的const屬性能夠得到維持。
- this指針的用途
  在成員函數(shù)中,使用this->可以訪問當(dāng)前對(duì)象的成員變量和成員函數(shù),以區(qū)分成員變量和函數(shù)參數(shù)的命名沖突。
  在類的靜態(tài)成員函數(shù)中,沒有this指針,因?yàn)殪o態(tài)成員函數(shù)不依賴于特定的對(duì)象。
- this指針的使用場景
  當(dāng)成員函數(shù)中的參數(shù)和成員變量同名時(shí),使用this指針可以明確指示成員變量。
  在類的方法鏈?zhǔn)秸{(diào)用中,返回this指針可以使調(diào)用更加簡潔。
下面是一個(gè)示例代碼,演示了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,并在方法鏈?zhǔn)秸{(diào)用中返回了當(dāng)前對(duì)象的引用。這樣可以連續(xù)調(diào)用increment()函數(shù),并對(duì)成員變量x進(jìn)行遞增操作。
總之,this指針在C++中是一個(gè)非常有用的特性,它使得在成員函數(shù)中能夠輕松訪問當(dāng)前對(duì)象的成員,并提供了便捷的方式來實(shí)現(xiàn)方法鏈?zhǔn)秸{(diào)用。
4. inline內(nèi)聯(lián)函數(shù)
在C++中,inline是一個(gè)關(guān)鍵字,用于對(duì)函數(shù)進(jìn)行內(nèi)聯(lián)展開。使用inline關(guān)鍵字聲明的函數(shù)被稱為內(nèi)聯(lián)函數(shù)。內(nèi)聯(lián)函數(shù)的主要目的是減少函數(shù)調(diào)用的開銷,通過在函數(shù)調(diào)用點(diǎn)展開函數(shù)代碼,可以避免函數(shù)調(diào)用的額外開銷,從而提高程序的執(zhí)行效率。
以下是內(nèi)聯(lián)函數(shù)的一些特點(diǎn)和注意事項(xiàng):
定義:內(nèi)聯(lián)函數(shù)通常在類定義中聲明,也可以在函數(shù)定義時(shí)加上inline關(guān)鍵字。例如:
// 在類定義中聲明內(nèi)聯(lián)函數(shù)
class MyClass {
public:
    inline void foo();
};
// 在函數(shù)定義時(shí)聲明內(nèi)聯(lián)函數(shù)
inline void MyClass::foo() {
    // 函數(shù)代碼
}
- 編譯器決策:inline關(guān)鍵字只是向編譯器發(fā)出了一個(gè)請(qǐng)求,請(qǐng)求將函數(shù)內(nèi)容內(nèi)聯(lián)到調(diào)用點(diǎn)。編譯器會(huì)自行決定是否真正內(nèi)聯(lián)展開函數(shù)代碼,它可能會(huì)考慮函數(shù)的復(fù)雜性、調(diào)用頻率等因素來作出最優(yōu)的決策。
- 適用場景:內(nèi)聯(lián)函數(shù)對(duì)于短小且頻繁調(diào)用的函數(shù)效果最好,而對(duì)于復(fù)雜的函數(shù)或大量邏輯的函數(shù)可能并不適合內(nèi)聯(lián)。適當(dāng)?shù)厥褂脙?nèi)聯(lián)函數(shù)可以提高性能,但濫用內(nèi)聯(lián)可能會(huì)導(dǎo)致代碼膨脹,增加可執(zhí)行文件的大小。
- 定義位置:通常將內(nèi)聯(lián)函數(shù)的定義放在頭文件中,因?yàn)樵诿總€(gè)調(diào)用點(diǎn)都需要展開函數(shù)代碼,編譯器需要知道函數(shù)的實(shí)現(xiàn)細(xì)節(jié)。
- 不支持遞歸:內(nèi)聯(lián)函數(shù)不支持遞歸調(diào)用,因?yàn)檫f歸調(diào)用無法在調(diào)用點(diǎn)展開。
- 靜態(tài)成員:類中的靜態(tài)成員函數(shù)默認(rèn)是內(nèi)聯(lián)的,即使沒有顯式使用inline關(guān)鍵字。
使用內(nèi)聯(lián)函數(shù)的示例:
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函數(shù)被聲明為內(nèi)聯(lián)靜態(tài)函數(shù)。在調(diào)用MathUtil::add(5, 3)時(shí),編譯器會(huì)嘗試在調(diào)用點(diǎn)展開add函數(shù)的代碼,從而減少函數(shù)調(diào)用的開銷。
需要注意的是,雖然內(nèi)聯(lián)函數(shù)可以提高性能,但并不是所有的函數(shù)都適合內(nèi)聯(lián)。適當(dāng)?shù)厥褂脙?nèi)聯(lián)函數(shù)是一種優(yōu)化手段,應(yīng)該根據(jù)實(shí)際情況和性能測試來決定是否使用內(nèi)聯(lián)。
聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 5
收藏 5
關(guān)注 37
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧
主站蜘蛛池模板: 人人射人人爽 | 国产精品久久久久久久毛片动漫 | 国产亚洲专区 | 日本老熟妇maturebbw | www.综合久久 | 成人免费无码大片A毛片 | 一区二区三区波多野结衣在线观看 | 国产精品美女久久久久久 | 午夜影院一级片 | 国产乱子伦视频大全 | 69综合精品国产二区无码 | 性XXXXXX中国寡妇mm | 黄色片在线免费 | 日本第一页 | 国产尺码和欧洲尺码表2022 | 欧美高清69 | 国产片天天弄 | 国产精品午夜一区二区欲梦 | 麻豆成人免费视频 | 一区二区三区日韩精品 | 国产极品无码色综合 | 欧产日产国产精品视频 | 日韩一级二级片 | 日本男人天堂 | 亚洲精品无码国产 | 高潮一区二区 | 亚洲精品无码AV中文字幕 | 国产成人久久综合777777麻豆 | 免费人成又黄又爽又色 | 亚洲欧美日韩在线 | 91av视频免费在线观看 | 美女视频一区 | 亚洲欧美日韩在线 | 亚洲精品国产福利 | 色婷婷五月综合激情中文字幕 | 直接观看黄网站免费视频 | 91福利网站在线观看 | 人人草人人爽 | 最近中文AV字幕在线中文 | 麻豆人妻少妇精品无码专区 | 亚洲婷婷六月的婷婷 |