草庐IT

remove_const

全部标签

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++ - 我在滥用 `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部分?我的第一个测试表明实际上根本没有效果。为什么?谢谢!

c++ - 临时 const 数组未绑定(bind)到右值引用

我有以下测试程序:#include#include#includetemplatevoidfoo(Ty(&&)[N]){std::cout::valuevoidfoo(Ty(&)[N]){std::cout::valueusingid=Ty;intmain(){std::cout.setf(std::cout.boolalpha);foo(id{1,2,3,4,5});foo(id{1,2,3,4,5});//我希望标有箭头的行会调用右值重载,就像它上面的非常量调用一样,但事实并非如此。这只是GCC中的一个错误,还是标准中有什么东西导致选择左值重载? 最佳答

c# - C++ dll 将 utf8 作为 const char* 发送,c# 需要做什么……什么?

dll是用c++编写的,通过constchar*回调将文本作为utf8发送。首先,这是声明回调的正确方法吗?[UnmanagedFunctionPointer(CallingConvention.StdCall)]publicdelegatevoidTextCallback(stringsText);[DllImport("cppLib.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]publicstaticexternvoidGetText([MarshalAs(UnmanagedType.Fu

c++ - 从运算符 T &() 中推导出 const

问题是不同的编译器产生不同的输出(clang/gcc),所以我认为这种用法是未定义的行为。然而,我的目标是在分配引用时推断const。输出:clang-3.6->不是constgcc-4.8.4->常量#include#includestructAnyReference{templateAnyReference(RT&a_var):_ptr(&a_var){}templateoperatorT&()const{if(std::is_const::value){std::cout(_ptr);}void*_ptr;};intmain(){inti(5);AnyReferencea(i);