精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++基礎知識之函數2

jf_78858299 ? 來源:QStack ? 作者:月下西樓 ? 2023-04-03 10:34 ? 次閱讀

內聯函數

C++中,我們可以使用inline關鍵字來定義內聯函數。內聯函數是一種特殊的函數,它在編譯時會被直接嵌入到調用它的代碼中,從而避免了函數調用的開銷,提高了程序的執行效率。內聯函數的定義通常比較短小,否則它的嵌入代碼會導致程序的體積增大,從而降低程序的性能。另外,內聯函數的使用也不是萬能的,它只適用于一些簡單的函數,對于復雜的函數,我們還是應該使用普通的函數。

使用和定義

在C++中,我們可以使用inline關鍵字來定義內聯函數。內聯函數的定義通常放在頭文件中,以便在多個源文件中使用。下面是一個簡單的內聯函數的例子:

inline int max(int a, int b) {
    return a > b ? a : b;
}

在上面的例子中,max函數是一個內聯函數,它的定義前面有inline關鍵字。當我們在程序中調用max函數時,編譯器會將其直接嵌入到調用它的代碼中,從而避免了函數調用的開銷。

優點

  • 提高程序的執行效率。由于內聯函數在編譯時會被直接嵌入到調用它的代碼中,從而避免了函數調用的開銷,因此可以提高程序的執行效率。
  • 可以避免一些函數調用帶來的問題。例如,函數調用會導致一些寄存器的值被保存和恢復,從而影響程序的執行效率。而內聯函數的嵌入代碼可以避免這些問題。

缺點

  • 可能會導致代碼體積增大。由于內聯函數的嵌入代碼會被直接嵌入到調用它的代碼中,因此可能會導致代碼體積增大,從而降低程序的性能。
  • 可能會導致代碼重復,效率降低。由于內聯函數的嵌入代碼會被直接嵌入到調用它的代碼中,因此可能會導致代碼重復,可能會導致編譯時間增加。

constexpr函數

在C++11中,我們可以使用constexpr關鍵字來定義constexpr函數。constexpr函數是一種特殊的函數,它在編譯時就能夠計算出結果,從而可以用于一些需要在編譯時確定的場合。

?需要注意的是,constexpr函數的定義和使用有一些限制,例如它的返回值類型必須是字面值類型,它的參數和函數體必須是常量表達式等等。

?

constexpr函數的定義和使用

在C++11中,我們可以使用constexpr關鍵字來定義constexpr函數。下面是一個簡單的constexpr函數的例子:

constexpr int factorial(int n) {
    return n <= 1 ? 1 : n * factorial(n - 1);
}

在上面的例子中,factorial函數是一個constexpr函數,它的定義前面有constexpr關鍵字。當我們在程序中調用factorial函數時,編譯器會在編譯時就計算出結果,從而可以用于一些需要在編譯時確定的場合。

優點

  • 在編譯時就能夠計算出結果,從而可以用于一些需要在編譯時確定的場合,可以提高程序的執行效率。
  • 由于constexpr函數的定義通常比較簡單,因此可以在頭文件中定義,從而方便其他文件的使用。

缺點

  • 定義和使用有一些限制。由于constexpr函數的定義和使用有一些限制,因此不能在所有的場合都使用constexpr函數。
  • 函數通常需要在編譯時計算出結果,因此可能會增加代碼量。 為什么會增加代碼量呢,例如,在下面的代碼中,我們定義了一個constexpr函數factorial,它的定義比較簡單,但是在編譯時會生成一些額外的代碼:
constexpr int factorial(int n) {
    return n <= 1 ? 1 : n * factorial(n - 1);
}

int main() {
    std::cout << factorial(5) << std::endl;
    return 0;
}

在上面的代碼中,編譯器會在編譯時生成一些額外的代碼,用于計算factorial(5)的結果。這些額外的代碼可能會增加程序的代碼量,從而影響程序的可讀性和維護性。因此,在使用constexpr函數時,需要權衡代碼量和執行效率之間的關系,選擇合適的方案。

函數指針

在C++中,函數指針是一種指向函數的指針,它可以用于調用函數或者作為函數的參數和返回值。函數指針的類型由函數的返回值類型和參數類型決定,例如,下面是一個函數指針的定義:

int (*p)(int, int);

在上面的代碼中,我們定義了一個函數指針p,它指向一個返回值類型為int,參數類型為int和int的函數。

函數指針的使用

函數指針可以用于調用函數或者作為函數的參數和返回值。例如,下面是一個使用函數指針的例子:

int add(int a, int b) {
    return a + b;
}

int sub(int a, int b) {
    return a - b;
}

int calc(int (*p)(int, int), int a, int b) {
    return p(a, b);
}

int main() {
    int a = 1, b = 2;
    int c = calc(add, a, b);
    int d = calc(sub, a, b);
    std::cout << c << std::endl; // 輸出 3
    std::cout << d << std::endl; // 輸出 -1
    return 0;
}

在上面的代碼中,我們定義了兩個函數add和sub,它們分別用于求兩個整數的和和差。然后,我們定義了一個函數calc,它有三個參數:一個函數指針p,兩個整數a和b。calc函數的作用是調用函數指針p,并將a和b作為參數傳遞給它。在main函數中,我們使用calc函數來計算兩個整數的和和差,并輸出結果。

除了回調函數,函數指針還可以用于實現函數對象和函數指針數組。函數對象是一種類對象,它重載了函數調用運算符operator(),從而可以像函數一樣被調用。函數指針數組是一種數組,它的元素是函數指針,可以用于實現多態和動態調用等功能。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C++
    C++
    +關注

    關注

    22

    文章

    2104

    瀏覽量

    73496
  • 代碼
    +關注

    關注

    30

    文章

    4748

    瀏覽量

    68356
  • 內聯函數
    +關注

    關注

    0

    文章

    10

    瀏覽量

    2200
收藏 人收藏

    評論

    相關推薦

    C++文件操作

    C++文件操作
    的頭像 發表于 07-21 10:52 ?1083次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>文件操作

    學51單片機C51基礎知識

    帶您從零學51單片機C51基礎知識 C51基礎知識1 單片機的匯編(ASM)和C語言優缺點
    發表于 02-10 14:30 ?109次下載

    C++C/C++程序設計教程_C/C++概述

    C++基礎知識,簡要介紹了C++的一些簡單知識,概念,函數
    發表于 12-25 10:15 ?0次下載

    C++語言基礎知識講解

    C++語言基礎知識講解,喜歡的朋友可以下載來學習。
    發表于 01-14 15:30 ?21次下載

    Visual C++教程之C++基礎知識介紹

    本文檔的主要內容詳細介紹的是Visual C++教程之C++基礎知識介紹主要內容包括了:1 類和對象,2 類的成員及特性,3 繼承和派生類
    發表于 02-15 15:59 ?9次下載
    Visual <b class='flag-5'>C++</b>教程之<b class='flag-5'>C++</b>的<b class='flag-5'>基礎知識</b>介紹

    C++程序設計教程之基礎知識資料概述

    本文檔詳細介紹的是C++程序設計教程之基礎知識資料概述主要內容包括了:1.程序設計語言 ,2.C++前史 ,3.C++,4.C++編程流程,
    發表于 02-28 11:11 ?13次下載
    <b class='flag-5'>C++</b>程序設計教程之<b class='flag-5'>基礎知識</b>資料概述

    C++程序設計的基礎知識初步了解C++的資料免費下載

    本文檔的主要內容詳細介紹的是C++程序設計的基礎知識初步了解C++的資料免費下載包括了:1 認識C++,2
    發表于 06-10 08:00 ?25次下載
    <b class='flag-5'>C++</b>程序設計的<b class='flag-5'>基礎知識</b>初步了解<b class='flag-5'>C++</b>的資料免費下載

    C++函數模板的概念及意義

    一、函數模板的引出:1、c++中有幾種交換變量的方法:(1)定義宏代碼塊(2)定義函數代碼版本一:#include <iostream>#include <string>using n
    的頭像 發表于 12-24 15:58 ?837次閱讀

    C++重載函數學習總結

    函數重載是c++c的一個重要升級;函數重載通過參數列表區分不同的同名函數;extern關鍵字能夠實現c
    的頭像 發表于 12-24 17:10 ?778次閱讀

    C++核心編程基礎知識大全免費下載

    C++核心編程基礎知識大全免費下載
    發表于 12-03 18:06 ?2次下載

    C/C++基礎知識匯總

    這是一篇五萬字的C/C++知識點總結,包括答案。
    的頭像 發表于 06-12 15:10 ?2352次閱讀

    C++基礎知識

    C++基礎知識
    的頭像 發表于 01-12 11:00 ?1358次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>基礎知識</b>

    深度解析C++中的虛函數

    函數作為C++的重要特性,讓人又愛又怕,愛它功能強大,但又怕駕馭不好,讓它反咬一口,今天我們用CPU的角度,撕掉語法的偽裝,重新認識一下虛函數。 虛函數
    的頭像 發表于 02-15 11:14 ?812次閱讀
    深度解析<b class='flag-5'>C++</b>中的虛<b class='flag-5'>函數</b>

    C++基礎知識函數1

    函數C++ 中的一個重要概念,它可以讓我們將一段代碼封裝起來,然后在需要的時候調用它。C++ 中的函數有以下幾個特點: * 函數
    的頭像 發表于 04-03 10:34 ?534次閱讀

    C++語言基礎知識

    電子發燒友網站提供《C++語言基礎知識.pdf》資料免費下載
    發表于 07-19 10:58 ?7次下載