草庐IT

const_buffers

全部标签

具有延迟初始化的 C++ const getter 方法

为延迟初始化的成员变量实现getter方法并保持const正确性的正确方法是什么?也就是说,我希望让我的getter方法为const,因为在第一次使用它之后,它就是一个普通的getter方法。const只是第一次(当对象首次初始化时)不适用。我想做的事:classMyClass{MyClass():expensive_object_(NULL){}QObject*GetExpensiveObject()const{if(!expensive_object_){expensive_object=CreateExpensiveObject();}returnexpensive_object

c++ - 为什么引用 const 可以在 for 语句中重新分配?

我是C++新手,对此我感到困惑:vectorv={1,2};constint&r1=v[0];//r1=v[1];//compilerwillshowerror.我了解不能重新分配引用constr1。但是看看下面的代码:for(constint&r2:v)cout为什么不会出错?引用constr2被分配了两次,对吧? 最佳答案 不,它没有分配两次。r2从迭代开始(循环体上的单轮)一直存在到迭代结束。r2在下一次迭代中是另一个同名对象。每次迭代都有自己的r2,每个迭代都是单独初始化的。 关

c++ - const vector 意味着 const 元素?

是否constvector意味着它的元素是const也一样?在下面的代码中,v[0].set(1234);在voidg(constvector&v)产生编译器错误const.cpp:28:3:error:memberfunction'set'notviable:'this'argumenthastype'constvalue_type'(aka'constA'),butfunctionisnotmarkedconst为什么?但是(*v[0]).set(1234);在voidh(constvector&v)对编译器来说没问题。版本之间有什么区别?//...................

c++ - 与 const 和没有相同的功能 - 何时以及为什么?

T&f(){//somecode...}constT&f()const{//somecode...}我已经看过几次了(在我迄今为止一直在学习的介绍性书中)。我知道第一个const使返回值const,换句话说:不可修改。我相信,第二个const允许也可以为const声明的变量调用该函数。但是为什么你会在同一个类定义中同时拥有这两个函数呢?以及编译器如何区分这些?我相信第二个f()(带有const)也可以为非常量变量调用。 最佳答案 Butwhywouldyouhavebothfunctionsinoneandthesameclassd

c++ - 迭代基本类型时使用 const 引用有什么缺点吗?

我发现自己最近越来越多地使用C++11,在过去我会使用迭代器的地方,我现在使用range-basedforloops尽可能:std::vectorcoll(10);std::generate(coll.begin(),coll.end(),[](){returnrand();});C++03:for(std::vector::const_iteratorit=coll.begin();it!=coll.end();++it){foo_func(*it);}C++11:for(autoe:coll){foo_func(e);}但是如果集合元素类型是模板参数呢?foo_func()可能会被

c++ - const 成员函数可以返回指向数据成员的非常量指针吗?

代码先行:classA{public:...int*foo()const{return_px;}private:int*_px;}成员函数foo返回一个指向private成员_px的非常量指针,我认为这为修改成员打开了大门_px对吧?foo是const成员函数吗?我应该在返回类型前面添加一个const吗?更新const-member-function应该保证的是,它不能改变任何数据成员,对吧?在我的例子中,函数foo不会打开修改classA的数据成员_px的大门,而是打开大门修改_px指向的内容,所以我的问题是,这是否违反了const函数应保证的内容? 最佳

c++ - "const class"是什么意思?

经过一些查找和替换重构后,我最终得到了这个gem:constclassA{};“const类”是什么意思?好像可以编译了。 最佳答案 const在那个例子中是没有意义的,你的编译器应该给你一个错误,但是如果你用它在结束}和;,然后将这些实例定义为const,例如:constclassA{public:intx,y;}anInstance={3,4};//Theaboveisequivalentto:constAanInstance={3,4}; 关于c++-"constclass"是什么

c++ - 为什么人们在 C++ 中使用枚举作为常量,而他们可以使用 const?

当人们可以使用const时,为什么人们在C++中使用枚举作为常量? 最佳答案 BruceEckel在ThinkinginC++中给出了一个理由:InolderversionsofC++,staticconstwasnotsupportedinsideclasses.Thismeantthatconstwasuselessforconstantexpressionsinsideclasses.However,peoplestillwantedtodothissoatypicalsolution(usuallyreferredtoast

c++ - 为什么 C++ 没有 const 构造函数?

(编辑:由于前面的示例存在缺陷,可能会导致一些答案/评论看起来很奇怪)这可能有点做作,但由于缺少const构造函数,以下是合法的:classCheater{public:Cheater(intavalue):cheaterPtr(this)//conceptuallyoddlegalityinconstCheaterctor,value(avalue){}Cheater&getCheaterPtr()const{return*cheaterPtr;}intvalue;private:Cheater*cheaterPtr;};intmain(){constCheatercheater(7

c++ - 给定 int **p1 和 const int**p2 p1 == p2 格式正确吗?

给定以下函数:voidg(int**p1,constint**p2){if(p1==p2){}}clang(回到版本3.0)产生这个警告(seeitlive):warning:comparisonofdistinctpointertypes('int**'and'constint**')usesnon-standardcompositepointertype'constint*const*'[-Wcompare-distinct-pointer-types]if(p1==p2){}~~^~~使用-pedantic-errors标志会将其变为错误。gcc(backto4.3.6)和Vis