草庐IT

const_iterator

全部标签

c++ - 为什么按值返回对于非内置类型应该是 const 而对于内置类型不是 const?

上的解决方案4和5GotW#6Const-Correctness提及这一点:PointGetPoint(constinti){returnpoints_[i];}Return-by-valueshouldnormallybeconstfornon-builtinreturntypes..intGetNumPoints(){returnpoints_.size();}..sincetheintisalreadyanrvalueandtoputin'const'caninterferewithtemplateinstantiationandisconfusing,misleading,an

c++ - 向成员函数添加 const 限定符

我目前正在编写一个接口(interface)类,它应该提供对复杂结构的内部元素作为常量或非常量引用的访问。这个想法是一些模块被授予const访问权限,而一些模块被授予完全访问权限。我已经使用'type_traits''std::add_const'来有条件地限定内部成员函数的返回类型,不幸的是我想不出有条件地将成员函数限定为const或非const的方法。这可能吗?如果是这样怎么办?例如:templatestructapply_const{typedefTtype;};templatestructapply_const{typedeftypenamestd::add_const::ty

C++ : syntax for passing iterator to a function?

我正在制作一个类,它是一种容器,我想制作一个可以采用“第一个”和“最后一个”迭代器的构造函数,如std::vector和其他标准容器。正确的语法是什么?(我想要一个模板函数,它可以接受任何可用的第一个/最后一个迭代器类型(就像我认为的标准库)。非常感谢!举个例子,我想要这样的东西:templateMyClass(...first,...last)但是……是什么?非常感谢。关于第一个答案:我想要一个将迭代器作为参数的特定构造函数(因为我已经有了将值和指针作为参数的构造函数)编辑:这样可以吗?templateMyClass(std::iteratorfirst,std::iteratorl

具有相同名称的 C++ const 和可变函数

考虑以下代码。#includeusingnamespacestd;classObject{public:Object(){}voidPrint()const{coutPrint();return0;}输出是constconstmutableconstmutable我想知道,当面对许多具有相同名称的可变方法时,C++如何决定调用哪个方法? 最佳答案 print_obj(obj1);print_obj(obj2);要调用的函数根据传递对象的cv-qualifier(const/volatile)求值。请注意,cv-qualifiers在

c++ - vector<shared_ptr<T>> 和 vector<shared_ptr<const T>> 之间的高效转换

我有一个类:classX{vector>v_;public:vector>getTs(){returnv_;}};它有一个vector的shared_ptr类型T.出于某种原因,它需要公开一个方法来返回这个vector。但是,我不想修改vector的内容,也不想指向对象。所以我需要返回一个vector的shared_ptr.我的问题是,有什么有效的方法可以做到这一点吗?如果我简单地返回它,它可以工作,但它需要重建一个vector,这有点昂贵。谢谢。 最佳答案 你不能直接这样做-但你可以在你的容器上定义“View”,让你做一些非常相似

c++ - 获取 const 左值引用的地址是否合法?

#includeintfoo(){return0;}intmain(){constint&a=foo();std::cout在这段代码中,a绑定(bind)到一个右值。取它的地址合法吗?(我的法律意思是:在代码中格式不正确?我是否导致了未定义的行为?) 最佳答案 这很好。在C++11中,您甚至可以这样做:int&&a=foo();a=123;您可以这样考虑临时对象(概念上和一般情况下):x=func();//translatedas:auto__temporary=func();x=__temporary;__destruct_va

C++/CX - 我需要从 const char* 实例化 Platform::String

我正在尝试根据返回constchar*的方法的结果构造一个Platform::String我根本无法让它工作,多年来一直摸不着头脑。我不是一个非常有经验的c++开发人员,所以答案可能很明显,但我似乎无法解决。感谢您的帮助。 最佳答案 您可以使用mbstowcshttp://www.cplusplus.com/reference/cstdlib/mbstowcs/填充wchar_t缓冲区,然后将其传递给Platform::String构造函数以创建一个包含所需数据的实例。staticwchar_tbuffer[MAX_BUFFER];

c++ - 是否可以推断出 std::insert_iterator 包含的类型?

我有一个需要模板化迭代器类型的函数。它当前取消引用迭代器以检查被迭代的类型。templatevoidfunc(Iteratori){//Inspectthesizeoftheobjectsbeingiteratedconstsize_ttype_size=sizeof(*i);...}我最近发现一些标准迭代器类型,例如std::insert_iterator将*i定义为对i的简单引用.即sizeof(*i)是迭代器本身的大小;与sizeof(i)或sizeof(***i)相同是否有一种通用方法(支持C++03)来确定任何标准迭代器正在迭代的对象的大小或类型?

c++ - 在初始化列表中使用复杂函数来初始化 const 成员是一个好的设计吗?

最近我在看一个类(class)的旧烂摊子......长话短说,如果一个成员是常量,将有助于线程安全。但问题是member是在ctor中初始化的,而且是非平凡的构造。所以我在考虑为那个成员创建一个特殊的初始化函数。这是一个好的决定吗?super简单的小例子(真正的代码充满了条件:)和try-s):classComplexInitList{std::pairinit_pair(constintfirst,constintsecond){if((first==0)||(second==0))throwstd::invalid_argument("divby0");returnstd::mak

c++ - 如何为集合提供带有迭代器的 const 接口(interface)?

我想创建一个具有如下签名的函数://Setfoundtobeaniteratortothelocationofkeyinmaporend()//ifnotfound.boollookup(constKey&key,conststd::map&map,std::map::const_iterator&found);但我也想在映射和迭代器不是const的情况下调用它,以便我可以修改找到的值:constKeykey;std::mapmap;std::map::iteratorfound;if(lookup(key,map,found)){found->second.modifingNonCo