簡體   English   中英

此C ++代碼是什么意思

[英]What does this C++ code mean

我試圖了解webkit如何解析url,而我卻很難做到這一點:

Vector<char, 4096> buffer(fragmentEnd * 3 + 1);

此行位於1214行(您可以在此處看到: http : //trac.webkit.org/browser/trunk/WebCore/platform/KURL.cpp#L1214 )。 我知道它正在構成一個char類型的向量,每個條目都是一個4096字節大的char數組,但是我沒有得到buffer(fragmentEnd * 3 + 1)部分。

我認為這使我最困惑,因為我找不到在任何地方實例化緩沖區變量的位置(應該不是Vector<char, 4096> buffer = new Vector<char, 4096>(...)

提前致謝

我知道它正在構成char類型的向量,每個條目都是一個4096字節大的char數組

不是。 WTF :: Vector模板采用兩個模板參數。 第一個是元素類型(在本例中為char,這意味着每個元素都是一個char,而不是char的數組)。 第二個是內聯容量,即向量可以存儲的字節數,而無需在堆上分配額外的內存。

但我沒有得到buffer(fragmentEnd * 3 +1)部分。

在堆棧上創建變量的語法是type variablename(constructor,arguments); 因此, buffer是變量的名稱, fragmentEnd * 3 + 1Vector<char, 4096>的構造函數的參數(用於指定向量的初始大小)。

buffer變量正是在該行上構造的:

Vector<char, 4096> buffer(fragmentEnd * 3 + 1);

逐步執行編譯器所采取的步驟,首先要確保堆棧上有sizeof(Vector<char, 4096>)個字節的空間,編譯器可以在其中構造Vector<char, 4096> buffer對象。 然后,它調用Vector<char, 4096>構造函數,該構造函數可以在堆棧中的存儲區上使用int (因為fragmentEnd * 3 + 1int )。

在當前的Vector源中,沒有采用int構造函數。 但是,有一個采用size_t (無符號int的構造函數 ,因此編譯器會將結果fragmentEnd * 3 + 1靜態轉換為size_t並調用該構造函數。

不,它不應該, new可以或可以不用於在C ++中分配新對象,這與C#不同。

說明:

Vector不是STL的向量之類的標准類。

該行在堆棧上創建Vector類型的對象緩沖區。 然后將參數傳遞給構造函數(括號中的內容)

查看有關所使用的Vector類的更多信息(它是來自Webkit的Vector(WTF名稱空間)-不是來自std)。

檢查Vector.h頭文件。 在這里

在Iulian的鏈接中,恰當命名為WTF::Vector的源表示第二個模板參數名為inlineCapacity

因此,它與某種優化有關,而這種優化應該與功能無關。 忽略它。 緩沖區的大小為fragmentEnd * 3 + 1 ,或多或少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM