[英]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 + 1
是Vector<char, 4096>
的構造函數的參數(用於指定向量的初始大小)。
buffer
變量正是在該行上構造的:
Vector<char, 4096> buffer(fragmentEnd * 3 + 1);
逐步執行編譯器所采取的步驟,首先要確保堆棧上有sizeof(Vector<char, 4096>)
個字節的空間,編譯器可以在其中構造Vector<char, 4096> buffer
對象。 然后,它調用Vector<char, 4096>
構造函數,該構造函數可以在堆棧中的存儲區上使用int
(因為fragmentEnd * 3 + 1
是int
)。
在當前的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.