草庐IT

size-classes

全部标签

为什么是:fp_len = 400,size_t len = 1

确定内容长度并附加'\0'fseek(fp,0,SEEK_END);longfp_len;fp_len=ftell(fp);fseek(fp,0,SEEK_SET);char*text=malloc(sizeof(*text)*fp_len+1);size_tlen=fread(text,fp_len,1,fp);text[fp_len]='\0';fp_len印刷:400,而Len印刷:1printf("%d",fp_len);printf("%d",len);我的理解是这是错误的:text[fp_len]='\0';这是正确的:text[len]='\0';但是,如果“Len”正在打印1.

C++ : sharing fields between class and superclasses

我对类和父类(superclass)共享字段有点困惑。我期待这没问题:classSuperC{public:SuperC();protected:doublevalue;};classC:publicSuperC{public:C(doublevalue);};SuperC::SuperC(){}C::C(doublevalue):SuperC(),value(value){}但编译器告诉我C没有字段“值”。C没有继承自SuperC中定义的那个?非常感谢 最佳答案 可以,但是您只能使用构造函数初始化列表语法来初始化当前类成员。您必须

c++ - 用父类(super class)的实例覆盖子类的实例

为了解决问题(实际上是在Ada中),我想出了以下代码。为什么它是合法的?classSuperclass{public:virtualvoidAnnounce(){printf("Iamthesuperclass\n");}};classSubclass:publicSuperclass{public:voidAnnounce(){printf("Iamthesubclass\n");}};intmain(){Superclassosuper;Subclassosub;Superclass*p=&osub;*p=osuper;osub.Announce();return0;}在main(

c++ - 对 vector (vector::operator[] 和 vector::size())的只读访问是异步安全的吗?

我的程序需要对vector的内容执行只读访问在SIGINT的信号处理程序中.(另一种方法是使用固定长度的C字符串的固定大小数组。)该程序设计为在POSIX环境中运行。是vector::operator[]和vector::size()异步安全(或信号安全)? 最佳答案 不,这不安全。C++111.9/6:Whentheprocessingoftheabstractmachineisinterruptedbyreceiptofasignal,thevaluesofobjectswhichareneitheroftypevolatile

c++ - decltype(some_vector)::size_type 不能用作模板参数

下面的类不编译:template,classAllocator=std::allocator>classMyContainer{public:std::vectordata;std::vector>order;};我收到以下编译器错误:error:type/valuemismatchatargument2intemplateparameterlistfor‘templatestructstd::pair’为什么编译失败,而下面的代码工作正常?template,classAllocator=std::allocator>classMyContainer{public:std::vecto

c++ - 使用 `size_t` 长度会影响编译器优化吗?

阅读时thisquestion,我看到第一条评论说:size_tforlengthisnotagreatidea,thepropertypesaresignedonesforoptimization/UBreasons.随后是另一条支持推理的评论。是真的吗?这个问题很重要,因为如果我要写,例如一个矩阵库,图像尺寸可以是size_t,只是为了避免检查它们是否为负数。但随后所有循环自然会使用size_t。这会影响优化吗? 最佳答案 size_t未签名主要是历史事故-如果您的世界是16位,那么最大对象大小从32767到65535是一个巨大

c++ - 在没有虚方法或父类(super class)的类中,假设(第一个成员变量的地址)== this 是否安全?

我创建了一个私有(private)API,它假定类中第一个成员对象的地址与类的this指针相同......这样成员对象就可以简单地派生出指向该对象的指针它是的成员,而不必显式存储指针。鉴于我愿意确保容器类不会从任何父类(superclass)继承,不会有任何虚拟方法,并且执行此技巧的成员对象将是声明的第一个成员对象,将该假设对任何C++编译器都有效,还是我需要使用offsetof()运算符(或类似运算符)来保证正确性?换句话说,下面的代码在g++下实现了我所期望的,但它能在任何地方运行吗?classMyContainer{public:MyContainer(){}~MyContain

c++ - 使用 size_t 值反向遍历 vector

我想以相反的方向遍历vector的值。如您所知,vector的大小是size_t。当我使用以下代码时:for(size_tr=m.size()-1;r>=0;r--){x[r]=f[r];for(size_tc=r+1;c我将超出vector的范围,因为在递减r=0后r将变为4294967295。我没有更改r的类型,因为在我的项目中,我将警告视为错误,所以它应该是size_t或者我应该转换它,这并不有趣。 最佳答案 如果您真的想使用size_t进行索引,则循环可以制定如下。for(size_tr=m.size();r>0;r--){

c++ - 权威的 “correct”方法,用于针对size_t测试循环变量时避免有符号/无符号警告

下面的代码生成一个编译器警告:privatevoidtest(){bytebuffer[100];for(inti=0;iwarning:comparisonbetweensignedandunsignedintegerexpressions[-Wsign-compare]这是因为sizeof()返回一个size_t,它是无符号的。我已经看到了许多有关如何处理此问题的建议,但是没有一个建议有很多的支持,也没有一个有任何令人信服的逻辑,也没有任何支持一个方法明显“更好”的引用。最常见的建议似乎是:忽略警告关闭警告使用类型为size_t的循环变量使用带有技巧的size_t类型的循环变量来避

c++ - 解锁对 STL vector::size 安全性的访问

我在STLvector上有几个作者(线程)和一个读者。正常的写入和读取是互斥保护的,但我想避免我拥有的循环上的争用,我想知道vector::size是否足够安全,我想这取决于实现,但因为通常vector动态内存是用于存储项目存储大小的内存不应在重新分配期间失效。我不介意有误报,在size>0之后,我实际上会锁定并再次检查,因此如果在另一个线程写入时读取size()不会出现段错误,它对我来说应该足够安全。 最佳答案 我不知道并发读取和写入整数段错误的实现(尽管C++03标准不禁止这样做,我不知道POSIX是否禁止)。如果vector使