草庐IT

const_cast-ing

全部标签

c++ - 将 QString 转换为 char * 的简洁方法(不是 const char* !!!!)

我有一个丑陋的代码来处理这些东西(创建一个c字符指针并在其中复制QString)但也许......以一种优雅的方式存在于QT中......实际代码:QStringmaquinaisamethodparameter.char*c_maquina=newchar[maquina.length()+1];strcpy(c_maquina,maquina.toStdString().c_str());仅供引用,我需要一个REALchar*而不是简单的constchar*所以这段代码不起作用:idMaquina.toLatin1().data();我不能使用http://developer.qt

C++ 和 QT4.5 - 传递一个 const int& 矫枉过正?通过引用传递对信号/插槽有帮助吗?

两个问题合而为一...对于实时视频处理应用程序,我有许多函数每帧调用多次。听取有关const和按引用传递的建议,这些函数的签名有点像这样voidprocessSomething(constint&value);当我不断输入几个额外的字符时,我想知道这是否有点矫枉过正。第二个问题,关于通过引用传递的主题,在QT的槽/信号机制中,通过引用传递是否有助于防止在正常函数调用中复制对象? 最佳答案 是的,这是矫枉过正,实际上会导致代码比按值传递int慢。一个int是四个字节;引用(本质上是一个内存地址)也是四个字节(在32位机器上)或八个字节

c++ - 如果成员函数影响逻辑状态而不是按位状态,它们应该是 "const"吗?

我正在编写一个类来包装控制硬件设备的遗留CAPI。在一个简化的例子中,我可能有这样的东西:classdevice{public:voidset_request(intdata){legacy_set_req(p_device,data);}intget_response()const{returnlegacy_get_rsp(p_device);}private:device_handle_t*constp_device;};类本身没有按位状态;因此,我可以选择将set_request()声明为const,编译器会对此感到满意。但是,从语义的角度来看,考虑到它会影响对象的可观察行为,这

c++ - 具有类型 'const CompareVPtrs' 的表达式将丢失一些 const-volatile 限定符以便调用

我正在用C++实现十五个益智控制台游戏,引发了以下错误Error4errorC3848:expressionhavingtype'constCompareVPtrs'wouldlosesomeconst-volatilequalifiersinordertocall'boolCompareVPtrs::operator()(Vertex*,Vertex*)'c:\programfiles\microsoftvisualstudio11.0\vc\include\xfunctional3241puzzle15这是我的结构structCompareVPtrs:publicbinary_fu

c++ - 避免 dynamic_cast/RTTI

我最近正在为一个副项目(cpp-markdownlibrary,出于好奇)编写一段C++代码,遇到了一个编码问题,我想听听一些意见。cpp-markdown有一个名为Token的基类,它有许多子类。两个主要的子类是Container(包含其他Token的集合)和TextHolder(用作Token的基类当然是包含文本的)。大部分处理是通过虚函数处理的,但其中一些处理在单个函数中处理效果更好。为此,我最终使用dynamic_cast将指针从Token*向下转换为它的子类之一,这样我就可以调用特定于子类的函数,并且它的子类。转换不可能失败,因为代码能够通过虚函数(例如isUn​​match

c++ - 我在滥用 `const` 吗?

最近几周,我发现自己到处都在使用大量的const。不仅在方法或参数声明中,甚至在临时变量中也是如此。让我用一个简单的函数来说明。我曾经写过://Adummyfunctionthatsumssomecomputationresultsunsignedintsum_results(constOperation&p1,constOperation&p2){unsignedintresult1=p1.computeResult();unsignedintresult2=p2.computeResult();//Wellthisfunctioncouldbeinonesinglelinebut/

c++ - 错误 : cannot convert 'const wchar_t [13]' to 'LPCSTR {aka const char*}' in assignment

//includethebasicwindowsheaderfile#include#include//theWindowProcfunctionprototypeLRESULTCALLBACKWindowProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam);//theentrypointforanyWindowsprogramintWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){//thehandleforthew

c++ - C++ 中的 static const 与 #define - 可执行文件大小的差异

我的基本情况:我有一个包含类似#definefoo(Flag1|Flags2|Flag3)的包含文件,因此它是位标志的预定义组合。为了类型安全,我想用静态常量替换这些#defines,即staticconstintfoo=(Flag1|Flag2|Flag3)(或类似的)。这个包含文件包含在程序的几十个地方。现在,当我在启用所有相关优化选项(使用VS2010的C++编译器)的情况下进行发布构建时,替换#defines似乎会使可执行文件增加几个KiB,具体取决于我替换了多少常量。为什么会这样?据我所知,如果可能的话,整数常量应该“内联”到生成的ASM代码中,我看不出如何使用staticc

c++ - x86/C++ - 指向指针 : Const being violated by compiler? 的指针

我正在为我的学生项目的游戏引擎开发一个共享指针(称为句柄)实现,我们遇到了一个我们无法解释的错误。出于某种原因,在我们工厂的某个时刻,有一个无效的内部指针通过句柄传递给工厂,这导致我们的原型(prototype)加载期间发生崩溃。我们调试了几个小时的过程,并将任何复杂的语句分解为最简单的版本,以便于调试。我最终将问题归结为Handle类的复制构造函数。但是,似乎仍然存在释放内部指针的中间步骤。我阅读了所有我能找到的关于可能导致此问题的文章,但没有找到任何内容。最后,我决定查看反汇编代码,看看我是否能弄清楚发生了什么。这是没有反汇编的复制构造函数。templateHandle::Hand

c++ - const 基类的作用

这个问题在这里已经有了答案:Isthereanydifferencebetween"T"and"constT"intemplateparameter?(3个答案)constintemplateargument[duplicate](2个答案)关闭9年前。以下构造的实际效果是什么:classBase{/*...*/};templateclassDerived:publicT{/*...*/};intmain(){Derivedd;//...}Derived类是否只能访问Base接口(interface)的const部分?我的第一个测试表明实际上根本没有效果。为什么?谢谢!