草庐IT

const_iterators

全部标签

c++ - 如何在实现文件中初始化一个 static const set<string>?

我对staticconstset的初始化似乎不正确,我很感激你的指导方针:obj.h:classobj{...private:staticconstsetkeywords;...}obj.cpp:conststringkw[]={"GTR","LTR","LEQ","GEQ","NEQ","SQRT","sqrt"};constsetobj::keywords=(kw,kw+sizeof(kw)/sizeof(kw[0]));但这会产生错误:error:conversionfrom‘conststring*{akaconststd::basic_string*}’tonon-scala

c++ - 使用 std::deque::iterator(在 C++ STL 中)搜索和删除某些元素

我在调用以下代码时遇到问题:#includeusingnamespacestd;dequedeq={0,1,2,3,4,5,6,7,8};for(autoit=deq.begin();it!=deq.end();it++){if(*it%2==0)deq.erase(it);}这导致了段错误。在查看问题后,我发现问题在于STL管理双端队列迭代器的方式:如果被删除的元素更接近双端队列的末尾,用于指向被删除元素的迭代器现在将指向NEXT元素,但不是前一个元素为vector::iterator做。我知道从it!=deq.end()修改循环条件至it可能会解决这个问题,但我只是想知道是否有一种

c++ - 如何将对象添加到 vector<const Obj&>?

我不确定为什么这不能编译:std::vectormyVector;voidfoo(constObj&obj){myVector.push_back(obj);}抱歉,关于我要实现的目标的一些额外信息:我不能在不破坏接口(interface)的情况下更改foo的签名,但我只想卡在通过foo传递的对象上。我确实想存储指向它们的指针,但我对如何做到这一点的语法感到困惑。 最佳答案 您不能拥有引用vector。因为vector中的东西必须是可复制和可分配的,而引用不是这些。您可能需要一个指针vector:std::vectormyVecto

c++ - '从 some_type** 到 const some_type** 的无效转换'

我有一个函数需要constsome_type**作为参数(some_type是一个结构,函数需要一个指向这种类型数组的指针).我声明了一个some_type*类型的局部变量,并对其进行了初始化。然后我将该函数称为f(&some_array),编译器(gcc)说:error:invalidconversionfrom‘some_type**’to‘constsome_type**’这里有什么问题?为什么我不能将变量转换为常量? 最佳答案 参见:Whycan'tIpassachar**toafunctionwhichexpectsaco

c++ - clang 和 gcc 之间对三元运算符的 const 引用地址的差异

我对这里发生的事情有一个模糊的想法...它与this有关但我想知道为什么clang++和g++以不同的方式处理这个问题。这里的未定义行为在哪里?注意:这与模板无关——我只是使用它们来使示例更紧凑。这都是关于whatever的类型。#include#includetemplatevoidtest(){Twhatever='c';constchara='a';std::cout();test();return0;}gcc输出(测试到4.9.3):begin:0x7fffe504201fref:0x7fffe504201fbegin:0x7fffe504201eref:0x7fffe5042

c++ - iterator_traits SFINAE 友好性

阅读excerpt时来自cppreferenceIfIteratordoesnothavethefivemembertypesdifference_type,value_type,pointer,reference,anditerator_category,thenthistemplatehasnomembersbyanyofthosenames(std::iterator_traitsisSFINAE-friendly)我自然而然地认为这意味着每个成员类型在迭代器本身中定义时就被定义了。但是你瞧,这实际上意味着如果定义了所有五个,那么它们就被定义了。structdefined{usi

c++ - 有没有理由我们能够在类定义中定义 [static const int] 而不是其他 static const 类型?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whyaren'tstaticconstfloatsallowed?在C++中这不可能吗?这让我很困惑。staticconstintA=100;//noerrorstaticconstfloatB=2.0f;//error,can'tdefinethistypeinclassdefinition.

传递 const 数组时 C++ 错误区分特化

考虑代码templateclassB;templateclassB{};templateclassB{};templateclassB{};templateclassB{};以下模板实例化工作正常:AAA但下面的不起作用:A是否有某种原因导致此特定组合无效,或者它可能是g++4.6.3的错误?顺便说一句,我设法使用SFINAE和boost::disable_if解决了这个问题,所以至少问题解决了。编辑我忘了提到有问题的错误是一个模棱两可的类模板实例化,它无法决定是对const的重载还是对数组的重载。EDIT2这与指针无关,这里是完整的上下文:我正在阅读C++TemplateMetapr

c++ - 下标对 const 的引用

我在这里查看一些C++代码,但我不理解某些东西。它无关紧要,但它来自与文档一起提供的YARP(机器人中间件)教程。virtualvoidgetHeader(constBytes&header){constchar*target="HUMANITY";for(inti=0;i现在,header是对const的引用,因此不能在此函数中修改。get是在它上面调用的,它的原型(prototype)是char*get()const;。header.get()如何下标和修改?该程序编译正常。我可能不明白这里发生了什么,但我是基于我在C++Primer中读到的内容......非常感谢您的澄清!祝你有

c++ - 为什么 QObject::disconnect(const QMetaObject::Connection &connection) 采用 const 参数来修改它?

staticboolQObject::disconnect(constQMetaObject::Connection&connection)此方法旨在断开现有的Connection对象以修改它。那么为什么将函数参数声明为const引用?在源码实现(qtbase/src/corelib/kernel/qobject.cpp)中,可以发现不可避免的const_cast:const_cast(connection).d_ptr=0;当函数的目的是修改它时,将函数参数标记为const有什么好处? 最佳答案 原因纯粹是历史原因。最初设想的AP