C 問題總結之二

2021-10-04 18:58:53 字數 1415 閱讀 4771

碰到問題就要記錄下來,防止遺忘吧。

今天在執行**的時候,碰都了下面的情況:

// 解析命令列引數

if(pcl::console::find_argument (argc, ar**,

"-h"

)>=0)

我可能是不夠熟悉vs中的命令列引數輸入的設定,所以到網上搜了半天*_*,不過最後還是找到了,如下圖所示:

巨集的實現主要依賴於c預處理器的工作,但是預處理器的乙個很大的缺點就是它並不了解c++語言的**規範,也就是它只能進行簡單的文字替換;所以為了使得巨集能夠被合理的運用到c++程式中去,就出現了內聯函式,而他與原來的巨集之間最大的區別在於「內聯函式」是由c編譯器來實現的,這就解決了巨集只是形似函式的問題,因為編譯器了解c++**規範,它是以函式來執行還是以內聯函式(巨集)的形式來執行就看編譯器來怎麼選擇了,我們只需要將函式宣告為inline即可。因此,在c++中我們應永遠不使用巨集,只使用內聯函式。

任何在類中定義的函式自動地成為內聯函式,但也可以使用inline關鍵字放在類外定義的函式前面使之成為內聯函式。但為了使之有效,必須使函式體和宣告結合在一起,否則,編譯器將它作為普通函式對待。形如:

inline

intmax

(int x,

int y)

;inline

intmax

(int x,

int y)

內聯**的確占用空間,但假如函式較小,這實際上比為了乙個普通函式呼叫而產生的**(引數壓棧和執行call)占用的空間還少。

在標頭檔案裡,內聯函式預設為內部連線——即它是 static, 並且只能在它被包含的編譯單元看到。因而,只要它們不在相同的編譯單元中宣告,在內聯函式和全域性函式之間用同樣的名字也不會在連線時產生衝突(類似於過載)。

總的來說,就是內聯函式其實就是「懂得c++**規範的巨集」,而且內聯函式還有個好處就是我們只管宣告內聯函式inline即可,使不使用它由編譯器來進行決定。

很長時間我都認為初始化和賦值是一樣的,但是其實並不是。在類中,初始化的實現在進入建構函式之前,而賦值則是進入建構函式之後(這裡一般指非內建型別object c++)。所以可以使用成員初始化列表來初始化成員變數,而不是建構函式。

point

(int x,

int y):x

(x),

y(y)

//使用初始化列表對成員變數進行初始化,未進入建構函式中

point

(int x,

int y)

CDN總結之二

cdn中的三個主要角色為 cdn提供者 內容提供者以及使用者。內容提供者在cdn提供者那兒進行註冊而使用服務,將其內容儲存到cdn提供者分布式的 伺服器上。內容可能是以提前準備的方式或者基於使用者需求的方式儲存在 伺服器上,以響應使用者的訪問。使用者的請求將會被最近的 伺服器響應。cdn提供者負責進...

裝載問題之二

上界函式 include include define maxsize 100 全域性變數 int n 貨櫃個數 int c 容量 int r 剩餘容量 int w maxsize 貨櫃重量 int cw 當前重量 int bestw 最優重量 輸入函式 void input 初始化函式 void ...

clone Graph的總結之二

今天寫clone graph的的dfs實現方法,這部分採用遞迴來實現 dfs dpeth first search 顧名思義,就是深度搜尋,一條路走到黑,再選新的路。遞迴寫法的dfs偽 如下 input a graph g and a root v of g procedure dfs g,v la...