草庐IT

Operator

全部标签

c++ - C++ 11中的运算符模数变化?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++operator%guarantees在C++98/03中5.6-4Thebinary/operatoryieldsthequotient,andthebinary%operatoryieldstheremainderfromthedivisionofthefirstexpressionbythesecond.Ifthesecondoperandof/or%iszerothebehaviorisundefined;otherwise(a/b)*b+a%bisequaltoa.Ifbothoperands

c++ - 这是实现通用 operator== 和 operator< 的安全方法吗?

看到thisquestion之后,我的第一个想法是定义通用等价和关系运算符是微不足道的:#includetemplatebooloperator==(constT&a,constT&b){returnstd::memcmp(&a,&b,sizeof(T))==0;}templatebooloperatorusingnamespacestd::rel_ops然后会变得更有用,因为它会被运算符的默认实现完全通用==和.显然,这不会执行成员比较,而是按位比较,就好像该类型只包含POD成员一样。这与C++生成复制构造函数的方式并不完全一致,例如,确实执行成员复制。但是我想知道上面的实现是否真的

c++ - 使用 bool operator== 比较对象

所以,看了一些SO问答,还是不明白为什么要用friendbooloperator==(BaseClassconst&left,BaseClassconst&right)代替booloperator==(BaseClassconst&right)现在我有这样的东西http://pastebin.com/pKsTabC0(已修复)-它似乎工作正常。但也许我错过了什么?有什么建议吗?更新1好的,我更改了源以使其正常工作http://ideone.com/fIAmB.删除了不必要的virtual并添加了const。我仍然不明白为什么要使用friend... 最佳答案

c++ - std::map 键的要求(设计决策)

当我制作std::map,C++对我的期望是my_data_type有自己的operator.structmy_data_type{my_data_type(inti):my_i(i){}booloperator原因是你可以导出operator>和operator==来自operator.b表示a>b,所以有operator>.!(a表示a既不小于b也不大于它,因此它们必须平等。问题是:为什么C++设计器不要求operator==明确定义?显然,operator==是不可避免的std::map::find()并从std::map中删除重复项.为什么要实现5个操作并调用一个方法两次,以免

c++ - 将默认构造的迭代器与 operator== 进行比较

C++标准是否说我应该能够比较两个默认构造的STL迭代器是否相等?默认构造的迭代器是否具有相等可比性?我想要以下内容,例如使用std::list:voidfoo(conststd::list::iteratoriter){if(iter==std::list::iterator()){//Something}}std::list::iteratori;foo(i);我在这里想要的是类似于迭代器的NULL值,但我不确定它是否合法。在VisualStudio2008附带的STL实现中,它们在std::list的operator==()中包含断言以排除这种用法。(他们检查每个迭代器是否由同一

c++ - 当我只想禁用它时,自定义赋值 operator=() 的签名是否重要?

我需要禁用复制赋值运算符。这将起作用:A&operator=(constA&);如果我不为operator=指定确切的参数,它会工作吗?我的意思是这样的:voidoperator=(void);返回值是对的,我可以随便写,但是参数类型呢?这会覆盖类的默认operator=吗? 最佳答案 来自12.8p17C++标准草案:Auser-declared copy assignmentoperatorX::operator= isanon-staticnon-templatememberfunctionofclass X withexac

c++ - 重载逻辑运算符被认为是不好的做法?

重载&&、||是个坏主意吗?或逗号运算符,为什么? 最佳答案 我不会重载operator&&或operator||。即使您定义了一个产生bool代数(例如有限集)的类,重载operator&和operator|可能是更好的选择。原因是C++程序员期望operator&&和operator||有特殊语义:它们是短路,即不要如果没有必要,评估他们的右手论点。您无法通过重载获得此行为,因为您将定义一个函数。重载operator,已经在例如Boost.Assign图书馆。这也是我所知道的其重载的唯一例子,我什至从未考虑过自己重载它。你最好有

c++ - 为下标运算符和函数调用运算符提供默认参数

在下面的代码中,我为数组下标运算符提供了默认参数。structst{intoperator[](intx=0){//codehere}};但是,编译器产生了一个错误:error:'intst::operator[](int)'cannothavedefaultargumentsintoperator[](intx=0)但是,如果我为函数调用运算符提供默认参数。structst{intoperator()(intx=0){//codehere}};它工作正常。所以,我有一个问题:为什么数组下标运算符不允许默认参数?为什么函数调用运算符允许默认参数? 最佳答案

c++ - Operator= 在 C++ 中重载

在C++Primer一书中,它有一个C风格字符数组的代码,并在文章15.3Operator=中展示了如何重载=运算符。String&String::operator=(constchar*sobj){//sobjisthenullpointer,if(!sobj){_size=0;delete[]_string;_string=0;}else{_size=strlen(sobj);delete[]_string;_string=newchar[_size+1];strcpy(_string,sobj);}return*this;}现在我想知道为什么下面这段代码做同样的工作时需要返回一个

c++ - 如何在 C++ 中将运算符作为函数调用

我想调用某个类的特定基类的特定运算符。对于简单的函数,这很简单:我只需编写SpecificBaseClass::function(args);。我应该如何在不施法的情况下为运算符(operator)实现相同的操作?孤立的问题:classA{public:Aoperator+(constA&other)const{...}};classB:publicA{public:Boperator+(constB&other)const{...}};...Ba,b;Bc=A::operator+(a,b);//howthisshouldbeimplemented?Igetanerror...我从G