草庐IT

const-string

全部标签

【C++】类与对象(三)—运算符重载|const成员函数|取地址及const取地址操作符重载

前言运算符重载,自增自减运算符重载,const成员函数,取地址及const取地址操作符重载文章目录一、运算符重载自增和自减运算符重载二、const成员函数三、取地址及const取地址操作符重载(了解即可)一、运算符重载运算符重载允许重新定义类对象的运算符行为。通过运算符重载,你可以使自定义类型的对象与内置类型一样,使用各种运算符进行操作,从而提高代码的可读性和灵活性。语法://函数名:关键字operator后面接需要重载的运算符符号。//函数原型:返回值类型operator操作符(参数列表)ReturnTypeoperator+(参数){//重载的+运算符的实现//返回类型可以是任何合适的类型

c++ - 为什么由 const 限定的变体成员组成的 union 会导致没有默认的默认构造函数?

N4567的标准草案建议将默认的默认构造函数定义为删除,如果——根据12.1,第4段:Xisaunionandallofitsvariantmembersareofconst-qualifiedtype(orarraythereof),换句话说,这相当于说,如果其变体成员之一不是const限定的,则上述规则不适用。我的问题是:让它的所有成员都具有const限定有什么特别之处(与至少其中一个成员没有const限定的相反情况相比),从什么角度来看它是密切相关的到默认的默认构造函数? 最佳答案 假设您有一个只有const成员的union:

c++ - "std::string + char"表达式是否创建另一个 std::string?

下面的表达式是否创建了另一个std::string然后将其添加到s1?std::strings1="abc",s2="xyz";s1+=s2+'b';它是否应该防止这种情况(它们无需额外工作就可以添加到s1)?std::strings1="abc",s2="xyz";s1+=s2;s1+='b';这些规则是否也适用于“std::string+std::string”表达式? 最佳答案 所有涉及std::string的重载+运算符都会返回一个新的std::string对象。这是您在youfinallydecipherthereleva

c++ - 使用模板减少 const 和非 const 非成员函数的代码重复

我有以下两个功能:Thing*find_thing_by_name(constString&name,Map&thing_map){autoit=thing_map.find(name);returnit->second;}constThing*find_thing_by_name(constString&name,constMap&thing_map){autoit=thing_map.find(name);returnit->second;}这只是我要解决的问题的一个简单示例。这些函数具有完全相同的主体,但我需要同时处理我的map的const和非const版本。我已经看到使用con

c++ - 使用 const 成员对自定义对象的 vector 进行排序

我想对包含const类对象的vector进行排序成员变量。不幸的是,我收到一条错误消息,指出“没有匹配函数来调用“swap””。当我删除const的关键字id,然后std::sort()适用于重载的operator和自定义比较功能。为什么会这样?我通常可以不对属于具有const成员变量的类的对象进行排序吗?#include#include#includeusingnamespacestd;structA{constintid;A(intid):id(id){}booloperatorvec;vec.emplace_back(3);vec.emplace_back(0);vec.empl

c++ - 带有 std::string 的文字类仅适用于模板特化?

我的编译器不允许以下定义,因为std::string有一个非平凡的析构函数(这说明teststr不能有平凡的析构函数成员(member)没有):classteststr{private:std::string_m;public:constexprteststr(std::stringvalue):_m(value){};constexprstd::stringm()const{return_m;}voidm(std::stringvalue){_m=value;}};但是,teststr的以下等价定义(据我所知)是允许的:templateclasstest{private:T_m;pu

c++ - 检查类型是否可以作为 boost::lexical_cast<string> 的参数

我有以下特征类(IsLexCastable)来检查是否可以通过调用boost::lexical_cast将类型转换为字符串.它错误地返回true对于vector.#include#include#include#include#include#includeusingnamespacestd;usingnamespaceboost;namespacestd{///AddingtostdsincethesearegoingtobepartofitinC++14.templateusingenable_if_t=typenamestd::enable_if::type;}templates

c++ - 获取 std::set 元素地址时从 ‘const int*’ 到 ‘int*’ 的无效转换

我收到以下错误error:invalidconversionfrom‘constint*’to‘int*’以下是我的程序#includeintmain(intargc,char**argv){std::setintSet;intSet.insert(1);intSet.insert(2);intSet.insert(3);intSet.insert(4);intSet.insert(5);int*pAddress=&(*(intSet.find(4)));}我想要std::set中元素的地址,此代码不会给Microsoft编译器带来任何编译错误,但g++会给出此编译错误。

c++ - 如何确定带有制表符扩展的 std::string 的(打印)长度?

给定一个包含制表符的C++std::string变量,是否有可能确定该字符串的长度,因为它会出现在“屏幕”上?即:std::stringvar="\t\t\t";std::cout 最佳答案 不容易。如果不了解所涉及的“屏幕”(实际上是驱动输出的软件)的具体知识,这是不可能的,因为选项卡扩展差异很大。有四种相当明显的可能性,基于固定扩展与扩展到某物的倍数,以及基于字符单元与其他一些固定测量(例如,对于比例字体)。还有具有更复杂标准的“智能选项卡”,其中一个选项卡的扩展可能取决于另一个选项卡。在典型的“控制台”上,将扩展mod8个字符

c++ - 资格调整(const/volatile)可能导致歧义

谁能帮我理解为什么当getter是const时下面的代码无法编译(VS2010)?测试代码如下:#includeclasssocket{public://setter-throwexceptionversionvoidnon_blocking(boolmode){//...}//getter-errorcodeversionboolnon_blocking(boost::system::error_code&ec)const{//...}//setter-errorcodeversionvoidnon_blocking(boolmode,boost::system::error_cod