草庐IT

has_equal_operator

全部标签

c++ - 如何在过载时强制发出 "statement has no effect"警告==

在下面的例子中:classTest{public:Test(int_value){value=_value;};constbooloperator==(int_value)const{returnvalue==_value;};private:intvalue;};intmain(void){inta;a==1;Testb(1);b==1;return0;}编译给出以下内容:$g++-Wall-pedantic-otesttest.cca.cc:Infunction‘intmain()’:a.cc:13:7:warning:statementhasnoeffect[-Wunused-v

c++ - 有没有一种方法可以将可变参数包中的所有类指定为模板的友元,以便使用 operator=?

我看到一个CRTPsolution,它将接口(interface)提取到基类中,并且只对每个基类的pack参数之一进行友好处理。然后最派生类继承所有友元基类并实现接口(interface)。我不能使用这种方法,因为我需要保护不能继承的赋值运算符。此外,由于赋值运算符有一个定义的签名,只有一个参数,我不能使用keypattern.这是我想要的:templatestructA{protected:A&operator=(constSomeClass&other){//...}private://Iwouldliketodothefollowing,butitdoesnotworkfrien

c++ - 静态与成员运算符重载:std::operator<< 和 std::ostream::operator<<

ostreamC++类为operator提供了许多默认重载,但是它们的定义方式并不完全相同。overloads对于char类型,string类型和右值流被定义为免费namespace-作用域函数,例如:namespacestd{ostream&operator虽然overloads对于算术类型,streambuf,和流操纵器被定义为std::ostream的成员函数比如:namespacestd{ostream&ostream::operator我的问题这种区别有什么原因吗?我知道对这些运算符重载的调用略有不同(即ADL用于免费namespace-范围定义),因此我想可能出于优化目的而

c++ - "xvalue has identity"是什么意思?

C++11引入了新的值类别,其中之一是xvalue.是explained由Stroustrup描述为类似(im类别):“它是一个值,具有身份,但可以从中move”。另一个来源,cppreference解释:aglvalueisanexpressionwhoseevaluationdeterminestheidentityofanobject,bit-field,orfunction;和xvalue是glvalue,所以这句话对于xvalue是正确的也是。现在,我认为如果xvalue有身份,那么我可以检查两个xvalues指的是同一个对象,所以我取xvalue的地址.事实证明,这是不允许

c++ - __has_trivial_copy 在 clang 和 gcc 中的行为不同。谁是对的?

std::is_trivially_copyable在这两个编译器中仍然不被支持(至少gcc4.6是这样)。但是两者都提供了做得很好的__has_trivial_copy指令。除非涉及到已删除的复制构造函数。structA{A(Aconst&)=delete;};__has_trivial_copy(A)在clang中返回1,在gcc中返回0。我正在研究标准,但找不到说明删除复制构造函数时类是否仍被视为可平凡复制的条款。谁是对的?我倾向于相信gcc是正确的,因为structA根本不可复制,更不用说可复制了。此外,有一个广泛的共识,即删除的复制构造函数可以被视为私有(private)声明

c++ - CPack DEB 生成器 : control-file-has-bad-permissions mdsums 0644 ! = 0644

我正在开发小型控制台应用程序,我正在尝试使用CPack创建Ubuntu包。Ubuntu版本是13.04,我的主要CPack文件在下面。软件包已正确创建,但在尝试使用图形界面(基本上是在Ubuntu中双击deb文件)安装时出现以下警告:Packageisofbadqualitycontrol-file-has-bad-permissionsmdsums0644!=0644有人知道这是什么原因吗?更重要的是,如何修复它?CMake版本是2.8.10.1,但我也尝试使用2.8.11.2,但没有任何变化。我看到,他们在这里遇到了类似的问题,但与fix的性质无关我的主要CPack文件:INCLU

c++ - 为什么替换 malloc() 需要链接器的知识,而::operator new() 不需要?

查看链接的问题。Differencebetweenglobaloperatornewandmalloc接受的答案指出,“替换malloc会引发大量蠕虫。它可以做到,但不可移植,因为它需要链接器的知识。”为什么替换malloc需要链接器的知识,为什么替换::operatornew()不需要? 最佳答案 标准C++对覆盖::operatornew做出了规定。虽然实现肯定是困惑的并且与链接器相关,但C++程序可以只定义一个不同的::operatornew并且它可以工作。C++标准明确表示:程序可以用自己的定义替换这些(等等各种限制和细节)

c++ - OpenCV Mat::operator= - 它支持写时复制吗?

从OpenCV文档来看,复制矩阵似乎是使用浅拷贝完成的,但是当更改其中一个拷贝时,就会完成一个拷贝。确切的reference是:Mat&Mat::operator=(constMat&m)Mat&Mat::operator=(constMatExpr_Base&expr)Mat&operator=(constScalar&s)MatrixassignmentoperatorsParameters:m–Theassigned,right-hand-sidematrix.MatrixassignmentisO(1)operation,thatis,nodataiscopied.Instea

c++ - 成为瓶颈时优化 `std::vector operator []`( vector 访问)

gprof说我的高计算应用程序53%的时间都在std::vectoroperator[](unsignedlong)中度过,其中32%用于一个经常使用的vector。更糟糕的是,我怀疑我的并行代码无法扩展到超过3-6个内核是由于相关的内存瓶颈。虽然我的应用程序确实花费了大量时间访问和写入内存,但似乎我应该能够(或至少尝试)做得比52%更好。我应该尝试使用动态数组吗(在大多数情况下大小保持不变)?这可能有助于解决可能的瓶颈吗?实际上,我的首选解决方案是解决瓶颈并为方便起见保留vector。基于以上,是否有任何可能的罪魁祸首或解决方案(tcmallocout)?

c++ - 如果我定义带有非常量参数的复制构造函数和 operator= ,我仍然会得到默认的复制构造函数和 operator= 吗?

在C++中,如果我定义了一个复制构造函数和operator=,它采用对该类的非const引用,编译器是否仍应为const引用提供默认版本?structTest{Test(Test&rhs);Test&operator=(Test&rhs);private://DoIstillneedtodeclarethesetoavoidautomaticdefinitions?Test(constTest&rhs);Test&operator=(constTest&rhs);}; 最佳答案 不,如果你定义一个复制构造函数和赋值运算符,编译器不会