草庐IT

const_iterators

全部标签

c++ - operator[](const char *) 歧义

下面的代码#includestructFoo{operatordouble(){return1;}intoperator[](std::stringx){return1;}};intmain(){Foo()["abcd"];}使用g++编译良好,但使用clang和intel编译器编译失败,因为声明的方法和native运算符[]之间存在歧义。如果Foo隐式转换为int,我会很清楚,但这里转换为double。这不是解决了歧义吗? 最佳答案 §13.3.3.1.2[over.ics.user]/p1-2:Auser-definedconv

C++ [错误] 'operator==' 不匹配(操作数类型为 'Vehicle' 和 'const Vehicle')

我正在为我的学校做一个项目(我还是个初学者),我遇到了以下问题:"[Error]nomatchfor'operator=='(operandtypesare'Vehicle'and'constVehicle')"Vehicle是我项目中的一个类。这就是给我错误的原因:intDayLog::findWaitingPosistion(Vehicleconst&v){if(find(waitingList.begin(),waitingList.end(),v)!=waitingList.end())return1;}waitingList是Vehicle对象的vector。我搜索并找不到答

c++ - 为什么 `const` 会作用于它之前的那个东西?

我正在学习C++。在我的类(class)中,解释说最好将const立即放置在您想要使其不可更改的内容之后,因为这就是const的方式有效。很多人,包括BjarneStroustrup本人,都喜欢在前面写const。但这有时会导致问题:constint*foo;//modifiablepointertoaconstantint.intconst*bar;//constantpointertoamodifiableint?No!It'samodifiablepointertoaconstantint.(Sothesametypeasfoo)一个显示此操作的示例:intfun(intcons

c++ - "Most important const"带条件表达式?

考虑以下代码:intfoo(MyClassconst*aPtr=0){MyClassconst&a=aPtr?*aPtr:MyClass();//Eitherbindto*aPtr,ortoadefault-constructedMyClass...returna.bar();}"mostimportantconst"希望在这里使用。目的是允许空aPtr传入(顺便说一句,是的,它必须是一个指针参数),在这种情况下是一个临时的MyClass对象将是默认构造的,并且其生命周期通过绑定(bind)到它的const引用来延长。然而,如果aPtr不为空,引用将绑定(bind)到其指向的对象,而不

c++ - 当 const 方法是公共(public)的并且非 const 方法受到保护时,为什么 C++ 不强制转换为 const?

我创建了一个类,其中包含两个get方法,一个是常量,一个是非常量。const方法是公共(public)的,因此用户可以查询vector。非常量方法是protected,所以我可以用它来修改我需要的数据。但是,当我尝试使用该类并调用get方法时,编译器提示非常量方法受到保护。相反,我必须使用const_cast将对象转换为const,这样我就可以获得公共(public)方法。有办法解决吗?既然有公共(public)方法,为什么编译器不自己进行转换呢?如果我删除protected版本并只保留const版本,它可以正常工作,所以在这种情况下它确实会执行转换。转换为const总是安全的。它正在

c++ - 为什么绑定(bind)到三元的 const 引用会生成拷贝?

这个问题在这里已经有了答案:Returntypeof'?:'(ternaryconditionaloperator)(4个答案)关闭7年前。我对此感到困惑:#includestructX{};voidf(constX&x){std::cerr为什么f的第二次调用会生成一个临时拷贝?编辑:这个问题与其说是类型X,不如说是复制的事实。我从已接受的答案中遗漏了值类别的微妙之处,并期望f的参数直接绑定(bind)到x或X()上,就像将其改写为if语句时那样。

c++ - iterator 和 const_iterator 之间的比较是否效率低下?

变体a:constautoend=whatever.end();for(autoit=whatever.begin();it!=end;++it){//...}变体b:constautoend=whatever.cend();//notethecalltocendinsteandofendherefor(autoit=whatever.begin();it!=end;++it){//...}是否有任何理由相信变体b会比变体a效率低,因为循环条件比较两种不同类型的迭代器?这会导致对它进行隐式转换吗?(end在for循环中多次使用,因此我想把它吊出来。) 最佳答

c++ - 容器优化:为什么 STL 容器方法参数不再使用 allocator::const_reference typedef?

阅读之前:const_reference是typedef,不需要是constT&正如您在std::vector::const_reference=bool中看到的那样.请在阅读其余部分时牢记这一点以正确理解它(正如评论中所建议的那样,这对很多人来说很难)。我想为简单类型(例如int)使用STL容器,但发现它们使用了次优的constT&“反模式”-它适用于大类,但在未内联时对于简单/基本类型不是最优的-考虑嵌入式系统,例如在ARM/ATSAM4L上,带有实例化。问题是:为什么例如vector::push_back使用(constvalue_type&)的参数重新设计而不是自C++11以来

c++ - 为什么 const volatile 引用不能绑定(bind)到右值引用?

我想了解为什么constvolatile引用不能绑定(bind)到右值引用?禁止这种转换的合理原因是什么?在下面的代码中,我注释掉了不编译的行:intmain(){inti=1;//constvolatileint&cvi2=std::move(i);->ERROR:why?constvolatileinti2=0;//constvolatileint&cvi3=std::move(i2);//->ERROR:why?}这是一个更现实的场景,由于类似的原因而无法编译:#includetemplatevoidg(constT&b){//dousefullthings}templatevo

c++ - 临时对象最初是 const 吗?

这个代码是UB吗?structA{voidnonconst(){}};constA&a=A{};const_cast(a).nonconst();换句话说,(临时)对象最初是const吗?我已经仔细阅读了标准,但找不到答案,因此希望能引用相关部分的内容。编辑:对于那些说A{}不是const的人,那么你可以做A{}.nonconst()? 最佳答案 引用的初始化a由[dcl.init.ref]/5给出(大胆的矿山):Otherwise,iftheinitializerexpressionisanrvalue(butnotabit-fi