草庐IT

c++ - 如何从 unsigned long 转换为 void*?

我正在尝试在具有给定文件描述符的文件的某个偏移处pwrite一些数据。我的数据存储在两个vector中。一个包含unsignedlong和其他char。我想构建一个void*指向代表我的unsignedlong和char的位序列,并将它传递给pwrite以及累积大小。但是如何将unsignedlong转换为void*?(我想我可以找出字符)。这是我正在尝试做的事情:voidwriteBlock(intfd,intblockSize,unsignedlongoffset){void*buf=malloc(blockSize);//hereIshouldbetryingtobuildbuf

C++类成员函数指针指向函数指针

我正在使用luabind作为我的lua到C++包装器。luabind提供了一个方法来使用我自己的回调函数来处理lua抛出的异常,set_pcall_callback()。所以我从文档中解释了一个例子,变化是logger->log()函数并将该函数放在一个名为“Engine”的类中,所以它不是一个常规的全局函数,它现在是一个成员函数,它是我的问题似乎在哪里。这里是相关的代码片段:classEngine//Wholeclassnotshownforbrevity{public:Engine();~Engine();voidRun();intpcall_log(lua_State*);pri

c++ - 为什么 C++ 在尝试将字符串转换为另一种类型时无法识别字符串?

我有一个相当简单的类,如下所示:classPerson{public:Person(stringname):_name(name){};voidgreet(constPerson&person)const{cout请注意,greet方法采用Person类型的参数。当我向它传递一个Person对象时,它按预期工作。现在让我们以这种方式将string作为参数传递给它:Personmaher("maher");maher.greet("sam");当尝试在QT中(在运行ubuntu的机器上)运行该代码时,它会生成以下错误:没有用于调用“Person::greet(constchar[4])”

c++ - '*(<type> *) &x' 和 'x' 有什么区别?

有什么区别inti=123;intk;k=*(int*)&i;cout和inti=123;intk;k=i;cout它们都给出相同的输出,但有什么不同吗?(我在快速平方根反函数的Quake3代码中找到了第一个片段) 最佳答案 第三季度:floatQ_rsqrt(floatnumber){longi;floatx2,y;constfloatthreehalfs=1.5F;x2=number*0.5F;y=number;i=*(long*)&y;//evilfloatingpointbitlevelhackingi=0x5f3759df

c++ - static_cast wchar_t* 到 int* 或 short* - 为什么它是非法的?

在MicrosoftVC2005和g++编译器中,以下会导致错误:在win32VC2005上:sizeof(wchar_t)为2wchar_t*foo=0;static_cast(foo);结果errorC2440:'static_cast':cannotconvertfrom'wchar_t*'to'unsignedshort*'...在MacOSX或Linuxg++上:sizeof(wchar_t)为4wchar_t*foo=0;static_cast(foo);结果error:invalidstatic_castfromtype'wchar_t*'totype'unsignedi

c++ - Visual Studio 2008 编译器不会在 C++ 中使用 sqrt 自动转换为 double 吗?

编译器不应该在下面自动转换为double吗?至少根据WalterSavitch的说法。#include#includeusingnamespacestd;intmain(){intk;for(k=1;k 最佳答案 问题是sqrt有三个版本可供选择:doublesqrt(doublex);floatsqrt(floatx);longdoublesqrt(longdoublex);由于您传递的是int,编译器将提升您的论点,但将您的整数提升为上述任何类型同样有效,因此它是不明确的。您可以通过简单地显式转换为上述类型之一来解决此问题,如:

c++ - 从字符串转换为 void* 并返回

是否可以从void*重新映射STL类对象?#includevoidfunc(void*d){std::string&s=reinterpret_cast(d);}intmain(){std::strings="Hi";func(reinterpret_cast(&s));} 最佳答案 使用static_cast将void指针转换回其他指针,只要确保转换回与最初使用的类型完全相同即可。无需转换即可转换为void指针。这适用于任何指针类型,包括指向标准库中类型的指针。(从技术上讲,任何指向对象类型的指针,但这就是“指针”的含义;其他类型

c++ - 将 int 转换为 size_t

我想知道当我传递integer时clang编译器的以下警告到std::initializer_list:non-constant-expressioncannotbenarrowedfromtype'int'to'unsignedlong'ininitializerlist为什么可以int被转换为size_t但是一个int不会传递给std::initializer_list,即intmain(){size_ts_t=0;inti=0;std::initializer_listi_l={i};//warnings_t=i;//nowarningreturn0;}

c++ - 如何将 double 转换为 float 指针?

我正在尝试将double指针转换为float指针,但我不知道正确的方法。这是我的代码#includeintmain(intargc,constchar*argv[]){//insertcodehere...float*f;doubled=10;f=reinterpret_cast(&d);d=20;std::cout我得到以下结果。RESULT:0Programendedwithexitcode:0如何正确地将double指针转换为float指针?ADD:我期望得到的结果是20 最佳答案 考虑:#include#includeusi

c++ - 从内置类型到自定义类的转换

我有一个名为Integer的自定义类,它充当int,我想告诉编译器如何自动将某些类型转换为Integer,这样我就可以避免一遍又一遍地输入相同的东西,someCall(Integer(1),Integer(2));会变成someCall(1,2);我已经用谷歌搜索了,但我能找到的只是做相反的事情,将Integer转换为int我想完成相反的事情。 最佳答案 编写一个接受int的构造函数,如:classInteger{public:Integer(int);};如果Integer类有这个构造函数,那么你可以这样做:voidf(Integ