草庐IT

has_equal_operator

全部标签

c++ - 反向迭代器错误 : no match for 'operator!=' in 'rcit != std::vector<_Tp, _Alloc>::rend() with _Tp = int, _Alloc = std::allocator'

代码A:vector::const_reverse_iteratorrcit;vector::const_reverse_iteratortit=v.rend();for(rcit=v.rbegin();rcit!=tit;++rcit)cout代码B:vector::const_reverse_iteratorrcit;for(rcit=v.rbegin();rcit!=v.rend();++rcit)coutCODEA工作正常但是为什么代码B通过错误:DEVC++\vector_test.cpp在'rcit!=std::vector::rend()与_Tp=int,_Alloc=s

c++ - operator() 模板特化

我正在尝试对模板运算符进行特化,模板如下所示:templateResultTypeoperator()(Iterator1a,Iterator2b,size_tsize,ResultTypeworst_dist=-1)const在我做了如下所示的特化之后:templatefloatoperator()(float*a,floatconst*b,unsignedlongsize,floatworst_dist=-1)const编译时出现错误:Cannotspecializeafunction'operator()'withinclassscope所有这些函数都在结构模板中我很乐意得到一些

c++ - 为什么迭代器在 VS2010 中导致调试非常缓慢,即使 _HAS_ITERATOR_DEBUGGING、_SECURE_SCL、_SECURE_SCL_THROWS 设置为 0

我一直试图找出为什么在Debug模式下调试我们的程序需要这么长时间。在使用xperf查看堆栈的样子后,很明显我们在迭代器和STL容器上花费了大量时间。我在谷歌上搜索了一会儿,找到了选项_HAS_ITERATOR_DEBUGGING=0_SECURE_SCL=0_SECURE_SCL_THROWS=0我用#define在代码中设置所有这些#define_HAS_ITERATOR_DEBUGGING0#define_SECURE_SCL0#define_SECURE_SCL_THROWS0但这似乎没有用,所以我尝试使用visualstudio项目中的预处理器定义,但似乎仍然没有帮助。我已经

c++ - C++14 是否要求删除表达式必须调用 `void operator::delete(void*, std::size_t)` 而不是 `void::operator delete(void*)` ?

根据thisvoidoperatordelete(void*);(1)voidoperatordelete[](void*);(2)voidoperatordelete(void*,conststd::nothrow_t&);(3)voidoperatordelete[](void*,conststd::nothrow_t&);(4)voidoperatordelete(void*,std::size_t)(5)voidoperatordelete[](void*,std::size_t)(6)voidoperatordelete(void*,std::size_t,conststd:

c++ - operator<< 重载如何工作?

给定一个类:structemployee{stringname;stringID;stringphone;stringdepartment;};下面的函数是如何工作的?ostream&operatorcout为给定的employeee生成格式化输出.示例输出:AlexJohnsonEmp#:5719Dept:RepairPhone:555-0174我无法理解ostream函数的工作原理。它如何获取参数“ostream&s”?它如何重载“ 最佳答案 这称为重载解析。你写了cout.编译器将其视为operator,其中cout是ostr

c++ - 转发声明结构时出错 : "has a previous declaration here"

在构建我的小型C++项目时,出现以下2个错误,无法找出原因:错误:在“结构”之后使用类型定义名称“TTF_Font”。指向Foo.h中的以下代码行:structTTF_Font;。错误:“TTF_Font”在此之前有一个声明。指向以下代码行:typedefstruct_TTF_FontTTF_Font;inSDL_ttf.h。我已将其缩小到新测试项目中的以下文件:Foo.h:#ifndefFOO_H#defineFOO_HstructTTF_Font;classFoo{TTF_Font*font;};#endif//FOO_HFoo.cpp:#include"Foo.h"#includ

c++ - operator new 负数

在C++11中,如果我们尝试使用全局运算符new分配负大小的数组,它会抛出std::bad_array_new_length,但是C++98/C++03呢?是UB还是会抛出std::bad_alloc?intmain(){int*ptr=newint[-1];} 最佳答案 如果大小为C++03标准的负数5.3.4p6,则程序不正确:Everyconstant-expressioninadirect-new-declaratorshallbeanintegralconstantexpression(5.19)andevaluateto

c++ - 在工作中遇到这个 "operator ClassName *"。这是什么意思?

有这段代码的类是ClassName指针的引用类,即:classClassName;classClassRef{ClassName*m_class;...operatorClassName*()const{returnm_class;}...我假设这用于指针有效性检查,例如:ClassRefref(newClassName())if(ref){blablabla}我的想法正确吗? 最佳答案 这是转换运算符的重载。每当需要将ClassRef对象转换为ClassName指针类型时,都会调用此运算符。所以;ClassRefr;ClassNa

c++ - std::reverse_copy "error: function call has aggregate value"

#include#include#include#includeusingnamespacestd;intmain(){intarrA[]={1,2,3,4,5,6,7,8,9};vectorvecIntA(arrA,arrA+sizeof(arrA)/sizeof(arrA[0]));vectorvecIntB(vecIntA.size());//copy((vecIntA.rbegin()+3).base(),(vecIntA.rbegin()+1).base(),vecIntB.begin());//OKvector::iterators=(vecIntA.rbegin()+3)

c++ - operator const Base&() 是否应该用于不可访问的基类?

我希望有一个类允许访问其基本情况的const接口(interface),但不允许访问其他类。特别是:classB{};classA:privateclassB{public:operatorconstB&(){return*this;}};intmain(){Aa;constB&b=a;//Shouldthislinebeanerror?}g++给出了一个不可访问的基类错误。你们那里的语言专家认为这个错误在C++11/C++14中是正确的吗?是的,我意识到我可以(并且将会)这样做:intmain(){Aa;constB&b=a.operatorconstB&();}对这个构造的另一种方