草庐IT

NAME_CONST

全部标签

c++ - 将函数返回的共享指针绑定(bind)到对 const 的左值引用是好的做法吗?

虽然我花了一段时间才习惯它,但我现在养成了让我的函数通过对const的左值引用而不是按值来获取共享指针参数的习惯(除非我需要修改原始参数,当然,在这种情况下,我通过对非const的左值引用来获取它们):voidfoo(std::shared_ptrconst&pWidget)//^^^^^^{//workwithpWidget...}这样做的好处是可以避免不必要的共享指针拷贝,这意味着线程安全地增加引用计数并可能导致不需要的开销。现在我一直在想,采用一种有点对称的习惯来检索从函数中按值返回的共享指针是否明智,如以下代码片段的末尾所示:structX{//...std::shared_p

c++ - 为什么对字符串参数的 const 引用可以采用字符串文字?

为什么对字符串参数的const引用可以采用字符串文字?字符串文字,如"hello",不是变量,那么为什么这段代码有效?classCVector{public:intx,y;CVector(){};~CVector(){deleteptr;}string*ptr;voiddoSomething(conststring&str){ptr=newstring(str);}voidprint(){cout首先,我认为引用作为参数用于避免复制过程并直接访问作为参数的变量(尽管我仍然是正确的)。但是字符串文字“asdas”不是变量,那么参数为什么可以以字符串文字为参数呢?我的意思是因为参数str是

c++ - (C++14) lambda 数组 : error: 'name' declared as array of 'auto'

我很难解决这个错误。我承认,我是C++的新手,我的困难来自于不理解错误消息。代码如下:autoselectionFuncs[8]={[&](constVector3&min,constVector3&max){returnmax.x_==seamValues.x_||max.y_==seamValues.y_||max.z_==seamValues.z_;},[&](constVector3&min,constVector3&max){returnmin.x_==seamValues.x_;},[&](constVector3&min,constVector3&max){returnm

c++ - 为什么删除此类型别名中的 const 限定符?

这个问题在这里已经有了答案:constantreferenceswithtypedefandtemplatesinc++(5个答案)关闭4年前。长话短说给定以下类型:structA{std::vectorvec;usingreference=std::iterator_traits::reference;usingconst_reference=constreference;};为什么reference==const_reference?为什么在第二个类型别名中删除了const限定符?请参阅godbold上的示例不应该编译。详情我有一个模板化类,它接受一堆迭代器(-types)作为模板

c++ - 'const' 变量是否默认在 C++ 中预先计算?

假设我有像这样的位置变量constfloatlatitude=51.+11./60.+33.0461/3600.;constfloatlongitude=12.+50./60.+31.9369/3600.;并在程序中经常使用它们。编译器会预先计算吗?(这个例子应该不会产生太多的开销,但你明白了。)指出位置的奖励积分。;)TIA 最佳答案 我认为编译器通常不需要计算算术常量表达式的结果。编译器是,但是,需要计算整数常量表达式的结果(基本上,常量表达式仅由整数和其他值转换为整数组成)在需要结果的情况下——也就是说,当整数常量表达式用作数

C++: 类方法前的 "const"

以这个方法声明为例:constVectorVector::operator-(constVector&other)const;我知道第二个const使作为参数传递的Vector不可变,最后一个const声明该方法不会更改Vector类的当前实例....但是第一个const到底意味着什么或导致什么? 最佳答案 这是一种过时的安全措施,可以防止像a-b=c这样的无意义代码被编译。(我说“过时”是因为它阻止了movesemantics,它只适用于非常量右值。) 关于C++:类方法前的"cons

c++ - c++11 中的 typeid(T).name() 替代方案?

在c++11中是否有一种标准的方法来使用一些模板黑魔法或动态地使用一些标准库函数来获取类的名称? 最佳答案 不,但你可以做一个:templatestructmeta{staticconststd::string&get_name(){returnT::class_name;}};然后将静态成员class_name添加到类中:classMyClass{public:staticconststd::stringclass_name("MyClass");};或专门化元:templatestructmeta{staticconststd:

c++ - 在类内部定义一个const静态对象变量

我需要在类定义中创建一个静态对象。这在Java中是可能的,但在C++中我得到一个错误:../PlaceID.h:9:43:error:invaliduseofincompletetype‘classPlaceID’../PlaceID.h:3:7:error:forwarddeclarationof‘classPlaceID’../PlaceID.h:9:43:error:invalidin-classinitializationofstaticdata我的类(class)是这样的:#includeclassPlaceID{public:inlinePlaceID(conststd::

c++ - "Expected class-name"...析构函数实现中的问题

我正在尝试实现堆栈和队列。我还获得了用于测试堆栈和队列的代码(以查看它们各自的功能是否正常工作)。我已经实现了stack和quete的功能,但是在尝试编译它们时出现错误:在析构函数“Stack::~Stack()”中'('标记前的预期类名在他们两个。以下是通用的Stack类:templateclassStack{Listlist;public:Stack();Stack(constStack&otherStack);~Stack();}列表类:templateclassList{ListItem*head;public:List();List(constList&otherList);

c++ - 强制偏好 const 版本?

假设我有classA{doublea;doubleValue()const{returna;}double&Value(){returna;}}//later:Afoo;doubleb=foo.Value();现在,将调用非常量版本。有没有一种强制使用const版本的好方法?我认为使用类型转换是可能的,但我认为这不是很优雅。 最佳答案 您可以将其转换为const。doubleb=static_cast(foo).Value();(我不认为我曾经显式地将const添加到变量中。我不确定static_cast是否比const_cast.