草庐IT

OPERATOR

全部标签

c++ - 显式原子加载/存储与通常的 operator= 和 operator T 有什么区别?

考虑这两种变体:std::atomica;a=1;intb=a;和std::atomica;a.store(1);intb=a.load();我从文档中看到第二个是完全原子的,但是我不明白什么时候应该使用哪个以及详细的区别是什么。 最佳答案 这两个例子是等价的;operator=和operatorT被定义为分别相当于调用store和load,默认值为memory_order参数。如果您对该默认值感到满意,memory_order_seq_cst,以便每次访问都充当内存栅栏,那么请使用您认为更好的那个。如果要指定不同的值,则需要使用函

c++ - 为什么隐式转换对于非原始类型不模棱两可?

给定一个具有多个隐式转换函数(非显式构造函数和转换运算符)的简单类模板,如下例所示:templateclassFoo{private:Tm_value;public:Foo();Foo(constT&value):m_value(value){}operatorT()const{returnm_value;}booloperator==(constFoo&other)const{returnm_value==other.m_value;}};structBar{boolm;booloperator==(constBar&other)const{returnfalse;}};intmai

c++ - 为什么隐式转换对于非原始类型不模棱两可?

给定一个具有多个隐式转换函数(非显式构造函数和转换运算符)的简单类模板,如下例所示:templateclassFoo{private:Tm_value;public:Foo();Foo(constT&value):m_value(value){}operatorT()const{returnm_value;}booloperator==(constFoo&other)const{returnm_value==other.m_value;}};structBar{boolm;booloperator==(constBar&other)const{returnfalse;}};intmai

c++ - 使结构的所有数学运算符都操作同一个成员

我有一个包含double和几个标志的结构,但我想在我的代码中使用它,就好像它只是那个double一样。有没有办法简化下面的代码,以便在这个结构的实例上执行的所有数学运算符都在包含的double上执行?我的代码可以运行,但我怀疑C++有一个非常优雅且简短的解决方案来解决我的问题。structSomeStruct{doublevalue;boolsomeFlag;boolsomeOtherFlag;operatordouble(){returnvalue;}voidoperator=(doublenewValue){value=newValue;}voidoperator+=(double

c++ - 使结构的所有数学运算符都操作同一个成员

我有一个包含double和几个标志的结构,但我想在我的代码中使用它,就好像它只是那个double一样。有没有办法简化下面的代码,以便在这个结构的实例上执行的所有数学运算符都在包含的double上执行?我的代码可以运行,但我怀疑C++有一个非常优雅且简短的解决方案来解决我的问题。structSomeStruct{doublevalue;boolsomeFlag;boolsomeOtherFlag;operatordouble(){returnvalue;}voidoperator=(doublenewValue){value=newValue;}voidoperator+=(double

c++ - 在混合 C/C++ 程序中协调 malloc 和 new 的 "correct"方法是什么?

我有一个混合的C/C++程序。它包含一个针对C的flex/bison解析器,而其余部分是C++。作为C,生成的解析器和扫描器使用malloc、realloc和free管理它们的内存。它们足以暴露钩子(Hook),允许我提交我自己的这些函数的实现。如您所料,(C++)程序的其余部分“想要”使用new、delete等。做一些研究似乎表明相关标准并不能保证这种混合应该有效。特别是C“堆”不一定是C++“空闲区域”。看来这两个方案可以互相践踏。除此之外,有一天(很快)这个程序可能会想要集成一个自定义的堆实现,例如tcmalloc,C和C++都使用。什么是“正确”的做法?考虑到集成tcmallo

c++ - 在混合 C/C++ 程序中协调 malloc 和 new 的 "correct"方法是什么?

我有一个混合的C/C++程序。它包含一个针对C的flex/bison解析器,而其余部分是C++。作为C,生成的解析器和扫描器使用malloc、realloc和free管理它们的内存。它们足以暴露钩子(Hook),允许我提交我自己的这些函数的实现。如您所料,(C++)程序的其余部分“想要”使用new、delete等。做一些研究似乎表明相关标准并不能保证这种混合应该有效。特别是C“堆”不一定是C++“空闲区域”。看来这两个方案可以互相践踏。除此之外,有一天(很快)这个程序可能会想要集成一个自定义的堆实现,例如tcmalloc,C和C++都使用。什么是“正确”的做法?考虑到集成tcmallo

c++ - 转换逻辑的目标是什么类型?

我不明白为什么在下面的代码中表达式Cc3=5+c;虽然5可以像前面的语句一样转换为C类型,但不会被编译。#includeclassC{intm_value;public:C(intvalue):m_value(value){};intget_value(){returnm_value;};Coperator+(Crhs){returnC(rhs.m_value+m_value);}};intmain(){Cc=10;Cc2=c+5;//Worksfine.5isconvertedtotypeCandtheoperator+iscalledCc3=5+c;//Notworking:com

c++ - 转换逻辑的目标是什么类型?

我不明白为什么在下面的代码中表达式Cc3=5+c;虽然5可以像前面的语句一样转换为C类型,但不会被编译。#includeclassC{intm_value;public:C(intvalue):m_value(value){};intget_value(){returnm_value;};Coperator+(Crhs){returnC(rhs.m_value+m_value);}};intmain(){Cc=10;Cc2=c+5;//Worksfine.5isconvertedtotypeCandtheoperator+iscalledCc3=5+c;//Notworking:com

c++ - 为什么要明确调用 operator new

我看到了这样的代码:void*NewElts=operatornew(NewCapacityInBytes);并且匹配调用显式operatordelete在后面使用。为什么这样做而不是:void*NewElts=newchar[NewCapacityInBytes];为什么要显式调用operatornew和operatordelete?? 最佳答案 显式调用operatornew就像调用全局“原始”运算符new。全局operatornew返回一个原始内存块,而不调用对象的构造函数或任何用户定义的new重载。所以基本上,全局opera