草庐IT

const_cast-ing

全部标签

c++ - 如何将 "invalid operands of types ' const char' 修复为二进制 'operator+'?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowdoIconcatenatemultipleC++stringsononeline?根据thisC++std::string使用operator+连接。那么为什么这段代码usingnamespacestd;stringsql="createtablem_table("+"pathTEXT,"+"qualityREAL,"+"foundINTEGER);";导致这个错误?invalidoperandsoftypes'constchar[22]'and'constchar[17]'tobinary'oper

c++ - 私有(private)成员 : Static const vs. 只是 const

当一个对象具有一些不会改变并且在其整个功能中都需要的特征时,我正在尝试确定最佳选择。静态常量成员Const成员在我看来,静态成员的真正原因是拥有一个可以更改的变量,从而影响同一类的所有其他对象。但是,有人建议将类“不变量”作为静态常量成员。我正在寻找有关建立类常量的推荐方法及其原因的一些见解。 最佳答案 “不会改变”不够准确。这里的主要问题是类的不同对象是否需要具有这些const成员的不同值(即使它们在对象的生命周期内没有改变)或者所有对象都应该使用(共享)相同的值。如果类的所有对象的值都相同,那么当然应该是类的staticcons

c++ - 为什么我不能将 const 映射结构传递给 C++ 中的函数?

我尝试将const与vector一起工作:例如:voiddamn(constvector&bb){for(inti=0;i但是当尝试使用map时,它不会:voidpas(constmap&mm){cout我想知道为什么没有。 最佳答案 map::operator[]有点奇怪。它这样做:寻找key。如果找到,归还。如果不是,则插入并默认构造其关联值。然后返回对新值的引用。第3步与constness不兼容。该语言没有两个功能不同的operator[]重载,而是强制您对const对象使用map::find。或者,有人可能会争辩说,如果参数

c++ - 将子字符串从 const char* 复制到 std::string

是否有任何可用的复制函数允许子字符串到std::string?例子-constchar*c="Thisisateststringmessage";我想将子字符串“test”复制到std::string。 最佳答案 您可以使用std::stringiteratorconstructor用C字符串的子字符串初始化它,例如:constchar*sourceString="Helloworld!";std::stringtestString(sourceString+1,sourceString+4);

c++ - 什么时候成员函数应该同时是 const 和 volatile?

我在阅读有关volatile成员函数的内容时发现成员函数可以同时是const和volatile的断言。我没有真正使用过这样的东西。任何人都可以分享他们在将成员函数同时用作const和volatile的实际使用方面的经验。我写了小类来测试同样的:classTemp{public:Temp(intx):X(x){}intgetX()constvolatile{returnX;}intgetBiggerX(){returnX+10;}private:intX;};voidtest(constvolatileTemp&aTemp){intx=aTemp.getX();}intmain(inta

c++ - STL 容器赋值和 const 指针

编译:int*p1;constint*p2;p2=p1;这不是:vectorv1;vectorv2;v2=v1;//Error!v2=static_cast>(v1);//Error!嵌套const指针的类型等价规则是什么?我认为转换是隐式的。此外,我宁愿不实现STL容器的逐点分配,除非我真的必须这样做。 最佳答案 直接赋值是不可能的。正如其他人所解释的那样,等价性不是由指针类型建立的,而是由容器类型建立的。在这种情况下,vector不想接受另一个具有不同但兼容的元素类型的vector。没有真正的问题,因为您可以使用assign成员

C++ dynamic_cast 转发声明的类模板编译,但它安全吗?

以下代码在(GCC和clang)中编译并给出预期的结果:templatestructDerived;structBase{templatevoidfoo(T*constt){dynamic_cast*const>(this)->bar(t);}};templatestructDerived:Base{voidbar(Tconst*)const{}};代码将对Base中的foo的调用分派(dispatch)到Derived中的bar。作为引用,以下代码无法编译:structDerived2;structBase2{templatevoidfoo(T*constt){dynamic_cas

c++ - 为什么捕获 std::bad_cast 在 FreeBSD 9 上不起作用?

考虑这段代码(badcast.cpp):#include#include#includeclassfoo{public:virtual~foo(){}};classbar:publicfoo{public:intval;bar():val(123){}};staticvoidcast_test(constfoo&f){try{constbar&b=dynamic_cast(f);printf("%d\n",b.val);}catch(conststd::bad_cast&){printf("badcast\n");}}intmain(){foof;cast_test(f);return

c++ - g++ 上 constexpr 上下文中成员指针的 static_cast

我在使用static_cast在constexpr上下文中向上转换成员指针时遇到了g++问题。请参见代码示例。在使用g++6.3和7.0版进行编译时,会出现编译错误,指出reinterpret_cast不是常量表达式。虽然clang4.0版没有给出错误,但我认为这是正确的,因为这里没有reinterpret_cast。这是g++或clang中的错误吗?什么是正确的行为?structBase{};structDerived:Base{inti;};structPtr{constexprPtr(intDerived::*p):p(static_cast(p)){}intBase::*p;}

c++ - 是否有扩展让优化器假定 const-ref 参数将保持常量?

与我之前的问题相关:Arecompilersnotallowedtoassumeconst-refparameterswillstayconst?我的新问题是:是否有特定于编译器的非标准扩展或语法来告诉GCC/Clang/MSVC对象不可写?例如,这是我希望能够编写的一些伪代码:voidf(constint&i){//Atthispoint,compilerdoesn'tknowif"i"canbemutatedornot,//soitassumesitcan//Fake-ish--compilernowassumes"i"cannotbemutatedandoptimizesacco