这是什么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>(...)

在此先感谢

+4

这是一个非常难以置信的糟糕的C++代码块。 – 2010-05-26 11:15:09

+1

嘿,那些'matchLetter()'行是'g','r','e','a','t';; – 2010-05-26 11:42:47

+0

哇,感谢大家的帮助! – 2010-05-26 12:38:30

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。但是,存在a constructor that takes a size_t(未签名的int),因此编译器会将结果fragmentEnd * 3 + 1静态转换为size_t并调用该构造函数。

没有它不应new可以或可以不被用于分配在C++中的新对象,不同的是,例如,C#

说明:

Vector不是一个标准类,像STL的矢量。

该行创建类型为Vector的堆栈上的对象缓冲区。然后它将参数传递给构造函数(括号中的内容)

查阅有关使用的Vector类的更多信息(它是来自webkit(WTF命名空间)的向量 - 不是来自std)。

检查Vector.h头文件。它是here

+0

完成:初始化发生在下面的行中。它需要引用Vector类中的内部缓冲区并填充它(我指的是您向我们展示的部分代码)。 – INS 2010-05-26 11:21:29

我拿到它使char类型的向量,每个条目是焦炭4096个字节的大型

数组它不是。 WTF :: Vector模板需要两个模板参数。首先是元素类型(在这种情况下是char,这意味着每个元素是一个char,而不是一个字符数组)。第二个是内联容量,即矢量可以存储的字节数,不需要在堆上分配额外的内存。

但我没有得到缓冲区(fragmentEnd * 3 + 1)的一部分。

在堆栈上创建变量的语法是type variablename(constructor,arguments);。所以buffer是变量的名称,而fragmentEnd * 3 + 1Vector<char, 4096>的构造函数(它指定向量的初始大小)的参数。

从Iulian的链接中,恰当地命名为WTF::Vector的源表示第二个模板参数名为inlineCapacity

因此,它与某种应该与功能无关的优化有关。忽略它。缓冲区的大小是fragmentEnd * 3 + 1,不多也不少。