草庐IT

has_equal_operator

全部标签

c++ - 为什么派生类不使用基类 operator=(赋值运算符)?

以下是实际问题的简化版本。与调用Base::operator=(int)不同,该代码似乎生成了一个临时Derived对象并改为复制该对象。为什么不使用基本赋值运算符,因为函数签名似乎完美匹配?这个简化的示例没有显示任何不良影响,但原始代码在析构函数中有一个副作用,会导致各种破坏。#includeusingnamespacestd;classBase{public:Base(){cout输出是:StartBase()Derived()Base(int)Derived(int)~Derived()~Base()Finish~Derived()~Base()http://ideone.com

c++ - std::map 是否要求比较器的 operator() 为 const?

在OSX10.8上使用libc++时,以下代码无法使用XCode4.5的clang++编译:#include#includeclassFoo{public:explicitFoo(intval_):val(val_){}intval;};structFooComparator{booloperator()(constFoo&left,constFoo&right){returnleft.valm;Foof(4);m[f]=std::string("four");return0;}错误:broken.cpp:11:8:note:candidatefunctionnotviable:'th

c++ - std::map 是否要求比较器的 operator() 为 const?

在OSX10.8上使用libc++时,以下代码无法使用XCode4.5的clang++编译:#include#includeclassFoo{public:explicitFoo(intval_):val(val_){}intval;};structFooComparator{booloperator()(constFoo&left,constFoo&right){returnleft.valm;Foof(4);m[f]=std::string("four");return0;}错误:broken.cpp:11:8:note:candidatefunctionnotviable:'th

c++ - 如何编写 operator== 以使用隐式转换/构造类型

为什么这不起作用,因为有一个隐式“构造”选项?classA{};templateclassType{public:Type()=default;Type(T*ptr){}};templatebooloperator==(Typel,Typer){returntrue;}intmain(){Aa;Typetype(&a);boolv=(type==&a);//Doesnotwork//boolv=(type==Type(&a));//Thatwouldwork}为什么是隐式构造Typewith(&base,即A*)未使用?我怎样才能编写此代码以使其工作? 最佳

c++ - 如何编写 operator== 以使用隐式转换/构造类型

为什么这不起作用,因为有一个隐式“构造”选项?classA{};templateclassType{public:Type()=default;Type(T*ptr){}};templatebooloperator==(Typel,Typer){returntrue;}intmain(){Aa;Typetype(&a);boolv=(type==&a);//Doesnotwork//boolv=(type==Type(&a));//Thatwouldwork}为什么是隐式构造Typewith(&base,即A*)未使用?我怎样才能编写此代码以使其工作? 最佳

c++ - 为什么 std::optional::operator=(U&&) 要求 U 是非标量类型?

对于可选的templateoptional&operator=(U&&v);标准要求(见[optional.assign]/3.16):Thisfunctionshallnotparticipateinoverloadresolutionunless...conjunction_v,is_same>>isfalse...为什么在分配U==T类型的标量时必须排除大小写? 最佳答案 这是为了支持:optionalo(42);o={};//我们有一堆assignmentoverloads,取:nullopt_toptionalconst&

c++ - 为什么 std::optional::operator=(U&&) 要求 U 是非标量类型?

对于可选的templateoptional&operator=(U&&v);标准要求(见[optional.assign]/3.16):Thisfunctionshallnotparticipateinoverloadresolutionunless...conjunction_v,is_same>>isfalse...为什么在分配U==T类型的标量时必须排除大小写? 最佳答案 这是为了支持:optionalo(42);o={};//我们有一堆assignmentoverloads,取:nullopt_toptionalconst&

c++ - "You can' t 前向声明重载 operator&"的类?

在GoogleC++风格指南中,有一个关于OperatorOverloading的部分有一个奇怪的说法:Overloadingalsohassurprisingramifications.Forinstance,youcan'tforwarddeclareclassesthatoverloadoperator&.这似乎不正确,我找不到任何导致GCC出现问题的代码。有谁知道那句话指的是什么? 最佳答案 标准的5.3.1有“可以获取不完整类型对象的地址,但是如果该对象的完整类型是声明operator&()为成员函数的类类型,则行为未定义

c++ - "You can' t 前向声明重载 operator&"的类?

在GoogleC++风格指南中,有一个关于OperatorOverloading的部分有一个奇怪的说法:Overloadingalsohassurprisingramifications.Forinstance,youcan'tforwarddeclareclassesthatoverloadoperator&.这似乎不正确,我找不到任何导致GCC出现问题的代码。有谁知道那句话指的是什么? 最佳答案 标准的5.3.1有“可以获取不完整类型对象的地址,但是如果该对象的完整类型是声明operator&()为成员函数的类类型,则行为未定义

c++ - C/C++ 中整数类型别名的标准保证?例如。 : Is "unsigned" always equal to "unsigned int"?

第一个问题:“无符号”总是与“无符号整数”相同吗?“signed”总是与“int”相同吗?“short”总是与“signedshort”相同吗?是……第二个问题:如果C/C++标准规定了上述问题的答案,哪些段落与这些问题相关? 最佳答案 是的,这些都是有保证的。在C++11中,请参阅§7.1.6.2[dcl.type.simple]/table10,其中列出了所有简单类型说明符(及其组合)及其含义。例如,该表包括以下内容:unsigned=>unsignedintunsignedint=>unsignedintsigned=>int