c++ - 这个C++代码是什么意思

标签 c++ webkit

我试图了解 webkit 如何解析 url,但我很难弄清这一点:

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

此行位于第 1214 行(您可以在此处查看:http://trac.webkit.org/browser/trunk/WebCore/platform/KURL.cpp#L1214)。我知道它正在制作一个 char 类型的 vector ,每个条目都是一个 4096 字节大的 char 数组,但我没有得到 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 + 1size_t并调用该构造函数。

关于c++ - 这个C++代码是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2912266/

相关文章:

c++ - 此函数如何通过 NOT 和 AND 运算计算 float 的绝对值?

c++ - 用 C++ 编写二进制 .STL 文件

android - 如何让 WVGA Android 浏览器停止缩放我的图像?

javascript - firefox 6 中的 mac 魔术鼠标水平滑动/滚动问题

css - 如何交叉浏览以下 css3 moz 片段?

c++ - 静态对象的非静态成员分配在哪里?

c++ - const_cast 设置规则并为函数 const 打破它

c++ - 在 C++03 中模拟 =delete 以限制复制/赋值操作的最简单方法是什么?

iOS HTML 输入标签在可滚动元素中停止滚动

mobile - 使用 webkit 远程调试开启移动浏览器