草庐IT

constness

全部标签

c++错误C2662无法将 'this'指针从 'const Type'转换为 'Type &'

我正在尝试重载c++operator==但我遇到了一些错误...错误C2662:“CombatEvent::getType”:无法将“this”指针从“constCombatEvent”转换为“CombatEvent&”这个错误在这一行if(lhs.getType()==rhs.getType())见下面的代码:classCombatEvent{public:CombatEvent(void);~CombatEvent(void);enumCombatEventType{AttackingType,...LowResourcesType};CombatEventTypegetType(

c++ - 可以将 const 引用返回给私有(private)成员吗?

我需要实现对私有(private)成员容器的只读访问。如果我返回一个常量引用,是否可以对其进行const_cast并获得对该成员的完全访问权限?要用什么技术?谢谢。 最佳答案 将const引用返回给私有(private)成员是否安全可以,只要引用的生命周期不超过返回它的对象的生命周期。如果您必须公开您不想修改的私有(private)成员,这是一个很好的方法。这不是万无一失的,但它是在C++中这样做的更好方法之一是否可以使用const_cast来真正搞乱成员是的,您无法阻止这种情况发生。任何时候都无法阻止某人在C++中抛弃const。

c++ - 为什么不对指针强制执行 constness?

考虑以下代码片段:classA{public:voidnonConstFun(){}};classB{private:Aa_;A*pA_;public:voidfun()const{pA_->nonConstFun();//a_.nonConstFun();//Givesconstrelatederror}};intmain(){Bb;b.fun();}在这里,我希望编译器会因为在B::fun()内调用A::nonConstFun()的常量而失败,而不管类型如何一个对象。但是编译器会提示对象,而不是指针。为什么?我在Windows10上使用VS2017。 最

c++ - const int *p 与 int const *p - 类型后的 const 是否可以接受?

我的同事在他提出的问题(1、2)上是0比2,所以我想我会给他一个追上来的机会。我们最近的分歧是关于在哪里放置“const”声明的样式问题。他认为它应该放在类型前面或指针后面。原因是这是其他人通常会做的事情,而其他样式很容易混淆。因此,指向常量int的指针和指向int的常量指针将分别为:constint*i;int*consti;但是,我还是很困惑。我需要一致且易于理解的规则,而我能够理解“const”的唯一方法是它在它正在修改的东西之后。有一个异常(exception)允许它在最终类型之前,但这是一个异常(exception),所以如果我不使用它对我来说会更容易。因此指向常量int的指

C++ const 关键字 - 随意使用?

在以下C++函数中:voidMyFunction(intage,House&purchased_house){...}voidMyFunction(constintage,House&purchased_house){...}哪个更好?在两者中,“年龄”都是按值传递的。我想知道'const'关键字是否是必要的:这对我来说似乎是多余的,但也很有帮助(作为变量不会改变的额外指示)。有没有人认为以上哪一项(如果有的话)更好? 最佳答案 首先,它只是一个实现细节,if你把const放在那里,不要把它放在声明集(标题)中。只放在实现文件中:/

C++:char** 到 const char** 的转换

这个问题在这里已经有了答案:WhyamIgettinganerrorconvertinga‘float**’to‘constfloat**’?(4个回答)关闭8年前。在C++中,当从转换时,为什么不能将char**作为参数传递给接受constchar**的函数>char*到constchar*是可以的,如下图voidf1(constchar**a){}voidf2(constchar*b){}intmain(intargc,charconst*argv[]){char*c;f1(&c);//doesn'tworkf2(c);//worksreturn0;}编译器输出是test.cpp:

c++ - 关于将 const 引用绑定(bind)到临时对象的子对象

像这样的代码#includestructP2d{doublex,y;P2d(doublex,doubley):x(x),y(y){}~P2d(){printf("Destructorcalled\n");}};P2dcenter(){returnP2d(10,10);}intmain(intargc,constchar*argv[]){constdouble&x=center().x;printf("x=%.18g\n",x);return0;}g++(5.2.0版)会在进入printf中之前销毁P2d临时实例main,但无论如何都会保留该值(即,不是将x绑定(bind)到临时P2d实

c++ - 从 C++ 中的 const 成员函数修改引用成员

我正在研究我的代码的const正确性,只是想知道为什么这段代码可以编译:classX{intx;int&y;public:X(int&_y):y(_y){}voidf(int&newY)const{//x=3;wouldnotwork,that'sfiney=newY;//doescompile.Why?}};intmain(intargc,char**argv){inti1=0,i2=0;XmyX(i1);myX.f(i2);...}据我了解,f()正在更改对象myX,尽管它说是const。当我分配给y时,如何确保我的编译器提示?(VisualC++2008)非常感谢!

c++ - 模板选择 const 引用而不是 const 指针

考虑以下几点:templatevoidFoo(constT*x){std::coutvoidFoo(constT&x){std::cout鉴于上述情况,我希望以下调用指针重载:int*x;Foo(x);但事实并非如此。这对我来说似乎很奇怪,因为constT*可以清楚地绑定(bind)到非constT就像constT&一样,但是指针变体似乎“更合适”。对于我的应用程序,我希望调用指针变体。我可以通过额外的特化来完成这项工作:templatevoidFoo(T*x){constT*const_x=x;Foo(const_x);}但这感觉是错误的和不必要的。有没有更好的办法?我不明白什么(除

c++ - 非常量对象的 const vector

在接口(interface)中定义函数:virtualvoidModifyPreComputedCoeffs(std::vector&model_)=0;我们希望指定vector模型_不应更改,因为不应对vector执行push_back等操作,但模型_中的IndexCoeffPair_t结构对象可以更改。我们应该如何指定?virtualvoidModifyPreComputedCoeffs(conststd::vector&model_)=0;我认为不起作用。 最佳答案 与其将vector传递给函数,不如按照标准库的方式传递一对迭