这是什么C++代码的意思
我想了解的WebKit如何解析的网址,而且我有一个很难做出的这个正面或反面:这是什么C++代码的意思
Vector<char, 4096> buffer(fragmentEnd * 3 + 1);
这条线是线1214(你可以请看这里:http://trac.webkit.org/browser/trunk/WebCore/platform/KURL.cpp#L1214)。我得到它正在创建一个char类型的向量,每个条目都是char 4096个字节的数组,但我没有得到buffer(fragmentEnd * 3 + 1)
部分。
我认为,它混淆了我大部分B/C我找不到在哪里缓冲区变量的任何地方实例化(是不是应该更多的东西一样Vector<char, 4096> buffer = new 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
。但是,存在a constructor that takes a size_t
(未签名的int
),因此编译器会将结果fragmentEnd * 3 + 1
静态转换为size_t
并调用该构造函数。
没有它不应new
可以或可以不被用于分配在C++中的新对象,不同的是,例如,C#
说明:
Vector
不是一个标准类,像STL的矢量。
该行创建类型为Vector的堆栈上的对象缓冲区。然后它将参数传递给构造函数(括号中的内容)
我拿到它使char类型的向量,每个条目是焦炭4096个字节的大型
数组它不是。 WTF :: Vector模板需要两个模板参数。首先是元素类型(在这种情况下是char,这意味着每个元素是一个char,而不是一个字符数组)。第二个是内联容量,即矢量可以存储的字节数,不需要在堆上分配额外的内存。
但我没有得到缓冲区(fragmentEnd * 3 + 1)的一部分。
在堆栈上创建变量的语法是type variablename(constructor,arguments);
。所以buffer
是变量的名称,而fragmentEnd * 3 + 1
是Vector<char, 4096>
的构造函数(它指定向量的初始大小)的参数。
从Iulian的链接中,恰当地命名为WTF::Vector
的源表示第二个模板参数名为inlineCapacity
。
因此,它与某种应该与功能无关的优化有关。忽略它。缓冲区的大小是fragmentEnd * 3 + 1
,不多也不少。
这是一个非常难以置信的糟糕的C++代码块。 – 2010-05-26 11:15:09
嘿,那些'matchLetter()'行是'g','r','e','a','t';; – 2010-05-26 11:42:47
哇,感谢大家的帮助! – 2010-05-26 12:38:30