草庐IT

buffer_size

全部标签

c++ - 为什么我需要在 C++ 中使用 `size_t`?

作为初学者,我对size_t真的很困惑。我可以使用int、float或其他类型。为什么还要声明size_t类型。我感觉不到它的优点。我看过一些pages,但我仍然无法理解。 最佳答案 它的主要优点是它是完成这项工作的正确工具。size_t按字面定义为足够大以表示您平台上任何对象的大小。其他人不是。所以,当您想存储对象的大小时,为什么要使用其他东西?如果您愿意,可以使用int,但您会故意选择导致错误的劣势选项。我不太明白您为什么要这样做,但这是您的代码。不过,如果您选择使用float,请告诉我们您正在编写什么程序,以便我们避免使用它。

c++ - 带有 Protocol Buffer 的 GzipOutputStream 和 GzipInputStream 的简单工作示例

在对ProtocolBuffers进行了几天的试验后,我尝试压缩文件。使用Python,这很容易做到,不需要任何游戏与溪流。因为我们的大部分代码都是用C++编写的,所以我想压缩/解压相同语言的文件。我试过boostgzip库,但无法让它工作(不压缩):intwriteEventCollection(HEP::MyProtoBufClass*protobuf,std::stringfilename,unsignedintcompressionLevel){ofstreamfile(filename.c_str(),ios_base::out|ios_base::binary);filte

c++ - 文章 Generic<Programming> Typed Buffers 在 C++ 11 中是否完全过时?

我正在阅读GenericTypedBuffers,一篇来自AndreiAlexandrescu的相当古老的文章。我想知道它是否仍然有意义。在他的文章中,Alexandrescu指出了当性能至关重要时std::vector的一些问题:分配vector时不必要的数据初始化,我认为可以使用std::vector::reserve解决使用C++11和移动语义解决的昂贵移动操作大多数编译器不会通过使用std::memcpy和std为char等类型优化std::vector::memmove。现在对于主流编译器来说这是不正确的(据我所见)。指数级增长。您无法通过简单的方法调用来缩小std::vec

c++ - 为什么 std::string::max_size 的值是 "strange"?

我在看std::string::max_size并注意到这个例子:#include#includeintmain(){std::stringstr("Teststring");std::cout输出:max_size:4294967291但是,我一直认为这个限制是由于无符号整数/size_t的最大值造成的-所以我有点希望它是2^32-1也就是4294967295。为什么此示例中的最大大小不使用这4个字节?我还尝试运行示例代码,在那台机器上它是2^62-这又让我感到困惑,为什么不是2^64-1代替?总的来说,我想知道,实现不会使用所有空间的原因是什么? 最佳答

c++ - 如果类有析构函数/delete[],则成员运算符 new[] 的参数 "size"增加

以下代码中的4个类:A、B、C和D。他们都有一个成员operatornew[]。此外,B有一个构造函数;C有析构函数;D有一个成员operatordelete[]。输出成员operatornew[]的参数size和4个类的sizeof:new[]A40new[]B40new[]C48new[]D48sizeof(A)4sizeof(B)4sizeof(C)4sizeof(D)4大小不同的原因是什么?代码(我知道很丑):#includeusingnamespacestd;classA{inti;public:staticvoid*operatornew[](std::size_tsize

C++ 重载 new[] 查询 : What size does it take as parameter?

我像这样重载了operatornew[]void*human::operatornew[](unsignedlongintcount){cout现在打电话human*h=newhuman[14];说sizeof(human)=16,但计算它打印出来的是232,也就是14*16+sizeof(int*)=224+8。为什么要分配这个额外的空间?它落在内存中的什么地方?因为当我打印*h或h[0]我得到相同的结果,所以它不在内存块的开头。它是否完全正确,或者我在这里遗漏了一些东西? 最佳答案 分配的额外空间用于存储内部使用的数组大小(在实

c++ - 从 size_t 转换为 int,还是用 size_t 迭代?

将迭代器条件右操作数从size_t转换为int更好,还是迭代可能超过int的最大值?答案实现具体吗?inta;for(size_ti=0;i 最佳答案 我几乎总是使用第一个变体,因为我发现大约80%的时间,我发现some_func应该也需要一个size_t。如果事实上some_func采用带符号的int,您需要了解当vect大于INT_MAX时会发生什么.如果解决方案在您的情况下不明显(通常不是),您至少可以替换some_func((int)i)与some_func(numeric_cast(i))(有关numeric_cast的一

c++ - std::match_results::size 返回什么?

我对以下C++11代码有点困惑:#include#include#includeintmain(){std::stringhaystack("abcdefabcghiabc");std::regexneedle("abc");std::smatchmatches;std::regex_search(haystack,matches,needle);std::cout我希望它打印出3但我却得到了1。我错过了什么吗? 最佳答案 你得到1因为regex_search仅返回1个匹配项,size()将返回捕获组的数量+整个匹配值。你的匹配是.

c++ - 在 Google Protocol Buffers 中对消息的重复字段中的项目进行排序

protocolbuffers库中是否有允许对指定为重复字段的数组进行排序的实现?例如,假设数组由一种类型的项组成,该类型本身包含一个索引字段,数组项需要根据该索引字段进行排序。我找不到它,所以我想我必须自己写一个。只是想确认一下。谢谢。 最佳答案 Protobufs通过mutable_*方法提供RepeatedPtr接口(interface),可以使用std::sort()模板进行排序。除非重复字段的基础类型是简单类型,否则您可能希望使用重载的运算符messageStaffMember{optionalstringname=1;o

c++ - Protocol Buffers 是否支持移动构造函数

我检查了moveconstructor规范和Messageconstructor来源,但没有找到。如果没有,有人知道添加它的计划吗?我正在使用proto3语法,编写一个库并考虑通过值返回与unique_ptr之间的关系。 最佳答案 根据https://github.com/google/protobuf/issues/2791这将在Protobuf版本3.4.0中得到支持。 关于c++-ProtocolBuffers是否支持移动构造函数,我们在StackOverflow上找到一个类似的问