草庐IT

compound-operator

全部标签

c++ - operator bool() 转换为 std::string 并与 operator std::string() 冲突

在类中声明operatorstd::string时,operatorbool()怎么会导致错误,而且它本身还充当到string的隐式转换?#include#includeusingnamespacestd;classTest{public:operatorstd::string(){cout 最佳答案 您面临的问题(除了operatorstd::string()返回bool之外)是隐式转换在您需要和不需要时触发。当编译器看到s=t时,它会识别以下潜在的std::operator=匹配项://usingstd::stringforco

c++ - 将 operator== 重载为带有模板参数的自由函数的语法是什么?

我有一组多态类,例如:classApple{};classRed:publicApple{};classGreen:publicApple{};以及比较它们的自由函数:booloperator==(constApple&,constApple&);booloperator我正在设计一个可复制的包装器类,它将允许我使用类Red和Green作为STL映射中的键,同时保留它们的多态行为。templateclassCopy{public:Copy(constCat&inCat):type(inCat.clone()){}~Copy(){deletetype;}Cat*operator->(){

c++ - error C2678 : binary '<' : no operator found which takes a left-hand operand. ..(或者没有可接受的转换)

这个问题在这里已经有了答案:HowcanIusestd::mapswithuser-definedtypesaskey?(8个答案)关闭5年前。这是我在map中查找值的代码:boolmyclass::getFreqFromCache(plVariablesConjunction&varABC,vector&freq){std::map>::iteratorfreqItr;freqItr=freqCache.find(varABC);if(freqItr!=freqCache.end()){freq=freqItr->second;returntrue;}}“PlVariablesCon

c++ - 如何在 C++ 中重载访问器和增变器 operator[]

我想编写一个String类。并希望使用下标访问我的String中的元素。所以,我写了两个成员函数,一个用来获取String中的元素,另一个用来设置String中的元素。请看下面的代码;#include#includeusingnamespacestd;classString{public:String();String(constchar*s);char&operator[](intindex);charoperator[](intindex)const;private:char*arr;intlen;};String::String(){arr=newchar[1];arr[0]='

c++ - 在实现 operator[] 时,我应该如何包括边界检查?

首先,我为这么简单的问题提出这么长时间表示歉意。我正在实现一个类,它用作空间填充曲线上的非常长的一维索引或表示该索引对应的笛卡尔坐标的n元组。classcurvePoint{public:friendclasscurveCalculate;//ConstructionandDestructioncurvePoint():point(NULL),dimensions(0){}virtual~curvePoint(){if(point!=NULL)delete[]point;}//MutatorsvoidconvertToIndex(){if(isTuple())calc(this);}v

c++ - 是否可以使用 operator new 从堆以外的其他地方进行分配?

这是我的应用程序的上下文:我正在开发一个使用来自不同设备的RAM的嵌入式系统。一部分在微Controller的内部RAM(128kB)中,另一部分是外部RAM(1MB)。这些内存映射到微Controller的地址空间,但位于非连续区域。内部RAM用于系统堆栈、任务堆栈和堆。外部RAM用于静态分配的数据(池、缓冲区和所有“static...”内容)我正在尝试实现一个简单的内存管理结构,并且作为它的一部分能够创建一个分配器,该分配器可以使用operatornew的分配算法但使用另一个内存源,而不是系统heap而是其他地方的内存区域。你知道这是否可能吗?一个使用示例可以是保留100kB的外部

c++ - 玩具垃圾收集 : Is operator new/delete enough?

我正在研究我的一个学习项目(使用C语言),并考虑将其迁移到C++以获得额外的学习点。它的一部分涉及针对特定对象系列的垃圾收集系统,在C中,我通常会使用大型malloc/mmap并使用简单的天真标记和清除(我可以识别引用和类似的东西)已经)。我的问题是我正在考虑将这个想法转移到C++,但我对我对其内存管理方案的理解不够安全。到目前为止,我考虑分配一个大内存池并在基类上重载运算符new和delete以调用我的内存池的抓取/释放函数,然后让垃圾收集器的清理阶段删除它看到的对象。够了吗?我在这里没有看到的隐藏陷阱是什么?编辑:澄清一下,我已经能够计算出分配对象的生命周期,因此无需使用gcabi

c++ - operator new[] 和非 POD 类型

我正在尝试重载operatornew以跟踪内存分配(用于调试)。我在分配非POD类型的数组时遇到了问题(例如,持有std::string的类的数组)。似乎调用了operatornew来为数组分配内存+用于存储数组长度的8个字节(可能是这样编译器可以在数组时调用正确数量的析构函数被摧毁)。operatornew[]如何确定实际数据将放置在返回地址(POD数组)还是返回地址+8处?(我需要这个以便我可以在结构中搜索指针) 最佳答案 我认为它会以与new[]知道要调用的构造函数相同的方式进行操作:编译器告诉它。编译器会跟踪数据类型并知道它

c++ - 使用模板模板参数对 'operator<<' 进行模糊重载

我正在尝试创建一个模板类,其中可以将类使用的(STL)容器定义为模板参数。所以我做了以下事情:templateclassContainer=std::vector,classAlloc=typenamestd::vector>::allocator_type>classSpectrogram;我的问题是,当我将流运算符的重载定义为//Definitioninsidethe'public'partofthe'Spectrogram'classtemplateclassC,classA>friendstd::ostream&operator&);//Implementationtempla

c++ - 错误 LNK2001 : unresolved external symbol "__declspec(dllimport) public: class QString & __thiscall QString::operator=(class QString &&)"

我非常想找到关于上述错误的任何信息。我正在使用visualstudio2010。当我在调试或发布中编译我的项目(32位)时,我收到以下消息:1>heterogeneous.obj:errorLNK2001:unresolvedexternalsymbol"__declspec(dllimport)public:classQString&_thiscallQString::operator=(classQString&&)"(_imp_??4QString@@QAEAAV0@$$QAV0@@Z)1>debug\nori.exe:fatalerrorLNK1120:1unresolvede