草庐IT

C++:如何将 int 转换为 unsigned long 而不更改任何位?

C++:如何将int转换为unsignedlong且不更改任何位?我想将值打包和解包到内存中。字长为64位。这个片段说明了问题:intv1=-2;//0xfeunsignedlongv2=(unsignedlong)v1;//0xfffe,Iwant0x00fe简单的解决方案是:unsignedlongv2=(unsignedint)v1;//0x00fe但是,这段代码位于目标类型是参数的模板中,所以我不得不求助于此:uint64target=mem[index]&mask;uint64v;if(value假设,例如,“value”的类型是一个int(16位)并且bits=16。目标是

c++ - vector 迭代器转换

嘿,在C++中,我有一个类型的vector:vectormyVector;其中,我将派生类的(push_back)指针插入其中。现在,我想弹出它的元素,所以我这样做:vector::iteratoriter;for(iter=myVector.rbegin();iter!=myVector.rend();iter++){//butbeforeIpopit,Ineedtoshutdownitdown//soIcastthis//butthisway,I'munabletocallthefunction(DerivedClass*(*iter))->Shutdown();myVector.

C++ 类型转换 : benefit of using explicit casts?

在C++中使用这些运算符而不是隐式转换有什么好处?dynamic_cast(expression)reinterpret_cast(expression)static_cast(expression)为什么、在哪里、在什么情况下我们应该使用它们?在OOP中很少使用它们是真的吗? 最佳答案 从您提供的转换列表中,唯一可以用来替代隐式转换的是static_cast。dynamic_cast用于将父类(superclass)向下转换为其子类。这不可能隐式发生,实际上在OOP中并不罕见。static_cast也可以用在这样的转换中,但是它更

C++基于变量向下转换为派生类

假设我有一个基类“Shape”和派生类“Triangle”、“Square”和“Circle”。“Shape”的成员是一个int“shapeType”。如果shapeType==1,则为三角形。如果shapeType==2,那么它就是一个正方形。如果shapeType==3,则为圆形。如果有一种方法可以通过使用shapeType值“动态”向下转换为正确的派生类,我很想知道我只有一个曾经是派生对象的“Shape”对象。我知道我可以写一个硬编码的switch语句,大致如下:Triangle*t;Square*s;Circle*c;switch(shape->shapeType){case1

C++将字符串转换为空指针

我使用的库具有回调函数,其中一个参数的类型为void*。(我想允许发送任何类型的值。)我需要传递一个字符串(std::string或char[]是一样的)。我该怎么做? 最佳答案 如果您确定该对象在函数的生命周期内处于事件状态(并且可以修改),您可以对字符串指针进行强制转换,在回调中将其转回引用:#include#includevoidCallback(void*data){std::string&s=*(static_cast(data));std::cout(&s));return0;}输出是Hello,Callback!

c++ - 我可以在不更改 use_count 的情况下将 shared_ptr<T> & 转换为 shared_ptr<T const> & 吗?

我有一个使用boost::shared_ptr的程序s,特别是依赖于use_count的准确性执行优化。例如,假设一个加法运算有两个参数指针lhs和rhs。假设他们都有类型shared_ptr.当需要执行加法时,我会检查use_count,并且如果我发现其中一个参数的引用计数恰好为1,那么我将重新使用它来就地执行操作。如果两个参数都不能重用,我必须分配一个新的数据缓冲区并执行异地操作。我正在处理庞大的数据结构,因此就地优化非常有用。因此,我永远无法复制shared_ptr没有理由,即每个函数都采用shared_ptrs通过引用或const引用以避免扭曲use_count.我的问题是:我

c++ - NULL 指针与 static_cast 的兼容性

Q1。为什么在static_cast中使用NULL指针会导致崩溃,而dynamic_cast和reinterpret_cast会返回NULL指针?问题发生在类似于下面给出的方法中:voidA::SetEntity(B*pEntity,intiMyEntityType){switch(iMyEntityType){caseENTITY1:{Set1(static_cast(pEntity));return;}caseENTITY2:{Set2(static_cast(pEntity));return;}caseENTITY3:{Set3(static_cast(pEntity));ret

c++ - 如何将指针转换为 int

我试图将地址的值存储在非指针int变量中,当我尝试转换它时,我得到编译错误“从‘int*’到‘int’的无效转换”这是我的代码'正在使用:#include#include#includeusingnamespacestd;vectortest;intmain(){int*ip;intpointervalue=50;intthatvalue=1;ip=&pointervalue;thatvalue=ip;cout 最佳答案 int可能不够大,无法存储指针。你应该使用intptr_t。这是一个整数类型,它足够大以容纳任何指针。intpt

c++ - 将 float 转换为 int,有和没有转换

这两个是等价的吗?floatf=3.14;inti;i=f;//3和floatf=3.14;inti;i=(int)f;//3 最佳答案 编译器处理这两种情况的方式没有区别。生成的机器代码将是相同的。但是,第一种是隐式转换,第二种是显式转换。根据编译器标志,您可能会在执行丢失精度的隐式转换时收到警告。旁注,文字3.14的类型为double,这意味着语句floatf=3.14中也可能存在精度损失>。一种干净的方法是编写floatf=3.14f指定这是float类型的值3.14。 关于c++

c++ - 类型转换 malloc C++

这个问题在这里已经有了答案:DoIcasttheresultofmalloc?(29个答案)关闭9年前。我有一些带有malloc语句的C代码,我想将它们与一些C++代码合并。我想知道什么时候以及为什么在C++中必须对malloc调用进行类型转换?例如:char*str=(char*)malloc(strlen(argv[1])*sizeof(char));