草庐IT

assignment-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++ - QML:在 QML 中使用 cpp 信号总是导致 "Cannot assign to non-existent property"

我只是想将一个cpp信号连接到一个qml槽并尝试了不同的方法,但它总是在运行时导致相同的QML错误:无法分配给不存在的属性“onProcessed”!为什么?这是我的Cpp对象:#includeclassImageProcessor:publicQObject{Q_OBJECTpublic:explicitImageProcessor(QObject*parent=0);signals:voidProcessed(constQStringstr);publicslots:voidprocessImage(constQString&image);};ImageProcessor::Ima

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++ - 复制构造函数、析构函数和赋值运算符。我们什么时候不需要它们?

我知道在你的类中添加cctor、dtor或op=时的C++经验法则,你还需要添加另外两个以使你的类在所有情况下都能正常工作。是否存在不需要提供全部三个而只需提供其中一两个的情况?如果您将其中一个添加到您的类中,为什么C++不要求您将它们全部添加?编辑1:当您不仅不需要其中一些,而且不想拥有它们时,您提到了示例,因此您希望将它们设为私有(private)或protected。但是即使是空体,您仍然需要在代码中编写它们。当你通过添加一个空主体的虚拟析构函数来使类多态时,我没有全部拥有它们的唯一正当理由。但是一旦你在析构函数的主体中写了一些东西,你就应该考虑在cctor和op=的主体中也写一

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++ - 没有 return 语句的重载赋值运算符

为什么允许赋值运算符返回void?为什么赋值链在这种情况下有效?看看代码,就会很清楚我在说什么。代码:structFoo{std::stringstr;Foo(conststd::string&_str):str(_str){}Foo&operator=(constFoo&_foo){str=_foo.str;//return*this;/*NORETURN!*/}};intmain(){Foof1("1");Foof2("2");Foof3("3");f1=f2=f3=Foo("4");std::cout问题:为什么这是合法的?(为什么要编译)为什么有效?我在很多地方读到“赋值运算符

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&();}对这个构造的另一种方