草庐IT

c++ - 以二进制方式将字符串写入文件

所以我正在使用这段代码来编写文件(现在只是测试,我稍后会写一个关卡编辑器):intmain(){ofstreamfile("level.bin",ios::binary);intents=1;//numberofentitesfile.write((char*)&ents,sizeof(int));floatx=300;//xandycoordsfloaty=500;file.write((char*)&x,sizeof(float));file.write((char*)&y,sizeof(float));intimglength=12;//stringsareprefixedbya

c++ - 为什么boost mpl set允许非唯一类型

我相信我对boost::mpl::set的理解存在根本性的缺陷。我以为它只允许唯一类型。但是下面的代码可以编译:#include#include#include#include#include#include#include#includeusingnamespaceboost::mpl;typedefsetmy_set;//longrepeatedinset?typedefvectormy_vec;//seemsreasonabletypedefaccumulate,plus>>::typeset_size;typedefaccumulate,plus>>::typevec_size

c++ - char 是唯一具有强制大小的类型吗?

在C++标准中:sizeof(char),sizeof(signedchar)andsizeof(unsignedchar)are1.C++中是否有任何其他类型具有固定的sizeof?空结构符合这个定义吗? 最佳答案 没有。如您所说,sizeof(signedchar)、sizeof(unsignedchar)和sizeof(char)由标准定义为1.请注意,char必须是signed或unsigned,但它始终被视为不同类型。sizeof任何其他内容都取决于实现,但要受到某些约束(例如sizeof(long)不能小于sizeof(

c++ - 为什么 C++ 使用 memset(addr,0,sizeof(T)) 来构造一个对象?标准错误还是编译器错误?

这个问题与我的另一个帖子有关:whyallocate_sharedandmake_sharedsoslow在这里我可以更清楚地描述问题。考虑以下代码:structA{chardata_[0x10000];};classC{public:C():a_(){}Aa_;};intmain(){Cc;return0;}我发现对于代码C():a_(),编译器使用memset(addr,0,0x10000)作为A的构造函数。如果类型A有一个空的构造函数,asm代码是正确的。为了更清楚的描述问题,我写了一些测试代码:#includestructA{//A(){}chardata_[0x10000];

c++ - delete my_object 时到底发生了什么;被执行? sizeof(MyClass) 是否将所有其他内存向左移动?

为了这个问题,我将把内存想象成一个简单的字节数组,我将讨论堆内存,因为它可以动态分配。假设我正在实例化某个类,并在已经分配了一些内存的堆上创建一个对象。然后,在创建对象之后,我分配了更多的内存(可能通过实例化另一个类)。当然,这意味着使用new和delete关键字。内存现在看起来是这样的:...bytebytemy_object...my_objectbytebyte...执行deletemy_object;时到底发生了什么?sizeof(MyClass)是否将所有其他内存向左移动?如果有,由谁负责?操作系统?那么当没有操作系统提供虚拟内存时会发生什么? 最

c++ - 确定多态 C++ 类的大小

使用sizeof运算符,我可以确定任何类型的大小——但我如何在运行时动态确定多态类的大小?例如,我有一个指向Animal的指针,我想得到它指向的实际对象的大小,如果它是Cat就会不同或Dog.有没有一种简单的方法可以做到这一点,而不是创建一个虚拟方法Animal::size并重载它以返回sizeof每种特定类型? 最佳答案 如果您知道可能的类型集,则可以使用RTTI通过执行dynamic_cast找出动态类型。如果不这样做,唯一的方法就是通过虚函数。 关于c++-确定多态C++类的大小,

c++ - 在 void 指针指向的内存中创建一个对象

如果我有一些空闲内存块的void*并且我知道至少有sizeof(T)可用,是否有任何方法可以在内存中的那个位置创建类型T的对象?我只是想在堆栈上创建一个T对象并将其memcpy过来,但似乎必须有更优雅的方法来做到这一点? 最佳答案 为其使用新的放置:#includevoid*space;new(space)T();记得在释放内存之前删除它:((T*)space)->~T();不要在栈上创建对象然后memcpy过来,不安全,如果对象的地址存储在成员或成员的成员中怎么办? 关于c++-在vo

c++ - 我可以在 vector 的一个实例上使用 value_type,而不是它的类型吗

在播放和尝试计算vector的总大小时,我尝试了类似的方法vectorvd;autoarea=vd.size()*sizeof(vd::value_type);//IveseenStepanovuseareaasnameforthiskindofsize,idkifheaddsthesizeofvdalsotoarea:)不幸的是,这不起作用......我需要使用vector::value_type但这会降低代码的可读性。它可以工作吗?我不喜欢sizeofvd.front()因为写front()看起来很难看为此。编辑:decltype变体也适合我所说的丑陋类别......

c++ - 添加两个整数的可变参数模板列表

给定这个类型templatestructlist{inlineintreduce(){intresult=0;constexprintarr[N]={content...};for(std::size_tk=0;k我想实现一个函数add,它返回一个新列表,其中包含两个输入列表的逐元素相加。换句话说(伪代码):add([a0,a1,a2],[b0,b1])->[a0+b0,a1+b2,a2]问题:我什至不知道如何声明这样一个函数的返回类型我不知道这是否可能 最佳答案 下面是我的做法:#include#includetemplatest

c++ - 为什么 offsetof(member) 等于 sizeof(struct)?

我有一个结构定义为:structsmth{chara;intb[];};当我在此结构上调用sizeof和offsetof时:cout输出是:44为什么stuct的大小是4,char占用1个字节,int数组的偏移量是4?为什么会有某种填充?另外,为什么int数组根本不占用任何空间? 最佳答案 Howcomewhenthesizeofthestuctis4andcharisusing1byte,theoffsetoftheintarrayis4?Whyistheresomekindofpadding?有填充是因为C标准允许;编译器经常对