草庐IT

compound-operator

全部标签

c++ - 无法在带有 Clang 的模块中使用对齐的 `operator new`

我正在试验Clang的“模块”功能,我正在尝试编译以下代码:exportmodulea;#includeexportvoid*foo(){return::operatornew(1,std::align_val_t(1));}exportintmain(){}Tryitlive当我尝试clang++-std=c++2a-pedantic-errors-fmodules-ts--precompile-xc++-modulea.cpp-oa.pcm,我得到了error:ISOC++requiresadefinitioninthistranslationunitforfunction'ope

c++ - 'operator =' 对于 std::string 是不明确的

我正在尝试使用我自己的转换运算符编写一个类,但我遇到了多个operator=的问题我设法用下面的小代码重现了这个问题#includeclassX{public:operatorconstchar*()const{return"a";}operatorstd::string(){return"c";}};voidfunc(){Xx;std::strings="";s=x;}我明白std::basic_string有多个赋值运算符,这就是编译器感到困惑的原因。如果我删除其中一个转换运算符,它会起作用,但我想知道是否有办法保留这两个运算符。我的类将根据类型转换返回不同的值。我也可以使用sta

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++ - 为什么替换 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);}; 最佳答案 不,如果你定义一个复制构造函数和赋值运算符,编译器不会

c++ - 为什么存储在 STL 容器中的类禁止重载 operator&()?

突然在thisarticle("problem2")我看到一条声明,如果该类具有重载的operator&(),则C++标准禁止使用STL容器来存储该类的元素。重载operator&()canindeedbeproblematic,但看起来可以通过asetofdirty-lookingcaststhatareusedinboost::addressof()轻松使用默认的“寻址”运算符并且被认为是便携的和符合标准的。为什么存在boost::addressof()解决方法时,禁止对存储在STL容器中的类重载operator&()? 最佳答案

c++ - 为什么 std::sort 不使用我的 operator< 实现

为什么std::sort不使用我的operator在thiscode中实现#include#include#include#includeusingnamespacestd;booloperator&t1,consttuple&t2){returnget(t1)>get(t2);//`>`sothatitgetssortedinreverse}intmain(){vector>v;for(inti=0;i(x)(x)(t1)>get(t2);//`>`sothatitgetssortedinreverse});cout(x)输出是:beforesort:0,1,2,3,4,5,6,7,