Questions tagged «operators»

对于编程语言,运算符是一种构造,其行为通常类似于函数,但在语法或语义上与常规函数不同。从Wikipedia:http://en.wikipedia.org/wiki/Operator_%28programming%29

3
包装器在包装同一对象时是否应该使用==运算符比较相等?
我正在为XML元素编写包装器,使开发人员可以轻松地解析XML中的属性。包装器除了被包装的对象外没有其他状态。 我正在考虑以下实现(此示例已简化),其中包括==操作员的重载。 class XmlWrapper { protected readonly XElement _element; public XmlWrapper(XElement element) { _element = element; } public string NameAttribute { get { //Get the value of the name attribute } set { //Set the value of the name attribute } } public override bool Equals(object other) { var o …
19 c#  .net  operators 

15
位运算符有什么用处?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 编程语言通常带有各种位运算符(例如,按位左移和右移,按位AND,OR,XOR ...)。这些虽然很少使用,但至少我的经验是这样。有时将它们用于编程挑战或面试问题中,或者可能需要解决方案,例如: 不使用任何相等运算符,创建一个函数,true当两个值相等时返回 在不使用第三个变量的情况下,交换两个变量的值 然后这些,可能在现实世界中很少使用。我猜他们应该更快,因为它们直接在低级别上操纵内存。 为什么在大多数编程语言中都可以找到这种语言?任何现实的用例?

6
使用按位运算的优点是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 在阅读了最新的CodeProject时事通讯之后,我发现了有关按位运算的这篇文章。它使阅读有趣,我当然可以看到检查整数是偶数还是奇数的好处,但是测试是否设置了第n位?这样做的好处可能是什么?

3
为什么C ++中的箭头运算符不只是*。的别名?
在c ++中,*运算符可以重载,例如使用迭代器,但是箭头(->)(。*)运算符不适用于重载*运算符的类。我认为预处理器可以轻松地用(* left).right替换->的所有实例,这将使迭代器更易于实现。->与众不同是不是有实际的原因,还是仅是语言/设计者的特殊性?
18 c++  operators 

2
按位或与添加标志
我见过其他人以前使用位或来组合标志: #define RUN 0x01 #define JUMP 0x02 #define SHOOT 0x04 const byte madPerson = RUN | JUMP | SHOOT; 我也是这么做的。 但是我也看到了使用加法的一些(不是很多)组合标志: #define RUN 0x01 #define JUMP 0x02 #define SHOOT 0x04 const byte madPerson = RUN + JUMP + SHOOT; 哪一个更“可读”?(您认为更多人会认出哪个?)这样做的“标准”方法是什么?你更倾向哪个?
16 c++  operators 

2
什么时候应该使用C#的隐式类型转换运算符?
在C#中,我们可以像这样重载隐式转换运算符(来自MSDN的示例): struct Digit { /* ... */ public static implicit operator byte(Digit d) // implicit digit to byte conversion operator { /* ... */ } } 因此,我们可以拥有一个类型,一个自定义值类型,将自己神奇地转换为另一种(不相关的)类型,从而使观众感到困惑(直到他们凝视到后台并看到隐式转换操作符为止)。 我不喜欢让任何阅读我的代码的人迷惑不解。我认为没有很多人这样做。 问题是,隐式类型转换运算符的用例是什么,它们不会使我的代码更难理解?
14 c#  operators 

7
操作员比关键字或函数更易读吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 这有点主观,但是我希望能更清楚地了解哪些因素使操作员易于使用,比较钝和困难。我最近一直在考虑语言设计,而我经常回想的一个问题是何时使用该语言对该键进行一些关键操作,以及何时使用关键字或函数。 Haskell为此而臭名昭著,因为自定义运算符易于创建,并且经常会打包新的数据类型,并附带多个运算符以供使用。例如,Parsec库带有大量运算符,用于将解析器组合在一起,并带有类似的宝石>.,.> 我什至不记得它们现在的含义,但是我确实记得一旦记住了它们,它们将非常易于使用他们的意思是。这样的函数调用会leftCompose(parser1, parser2)更好吗?当然更冗长,但在某些方面更加清晰。 类似C的语言中的运算符重载是一个类似的问题,但又与另一个问题相混淆,即重载了熟悉的运算符的含义,例如+具有异常的新含义。 在任何新语言中,这似乎都是一个棘手的问题。例如,在F#中,强制转换使用数学派生的类型转换运算符,而不是C#样式强制转换语法或冗长的VB样式。C#:(int32) xVB:CType(x, int32)F#:x :> int32 从理论上讲,一种新语言可以为大多数内置功能提供运算符。取而代之的def或dec或var变量声明,为什么不! name和@ name或类似的东西。它肯定会缩短声明后再进行绑定:@x := 5代替declare x = 5或let x = 5 大多数代码将需要大量变量定义,那么为什么不呢? 操作员什么时候清楚和有用,什么时候不清楚?


4
使用Null-Coalescing运算符实例化Null对象
请考虑以下典型情况: if(myObject == null) { myObject = new myClass(); } 我想知道使用null-coalescing运算符进行以下替换的想法: myObject = myObject ?? new myClass(); 我不确定是否应该使用第二种形式。这似乎是一个不错的速记,但是myObject = myObject开始时的构造似乎有点代码气味。 这是合理的做法,还是我缺少更好的速记?或者,也许是“三行,克服它!”? 编辑:如上所述,也许将其称为典型场景是一种夸大其词的说法。我通常会在从具有子引用类型属性的数据库中检索一个实体时遇到这种情况,该子引用类型属性可能已填充也可能尚未填充: myClass myObject = myClassService.getById(id); myObject.myChildObject = myObject.myChildObject ?? new myChildClass();
12 c#  operators 

11
有意义的运算符重载示例
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 在学习C#时,我发现C#支持运算符重载。我有一个很好的例子有问题: 有道理(例如,添加名为羊和牛的类) 不是两个字符串串联的示例 欢迎使用基类库中的示例。
12 c#  .net  operators 

1
为什么无法在C#中重载复合赋值运算符?
标题具有误导性,因此请阅读整个问题:-)。 所谓“复合赋值操作符”我心里有这样的结构op=,例如+=。纯赋值运算符(=)不属于我的问题。 “为什么”我不是指观点,而是某些设计师或其同事等表达其推理(即设计选择的来源)时的资源(书,文章等)。 我对C ++和C#中的不对称感到困惑(是的,我知道C#不是C ++ 2.0)-在C ++中,您将重载运算符+=,然后几乎完全+依靠先前定义的运算符自动编写适当的运算符。在C#中是相反的-您过载+并+=为您综合了。 如果我没记错的话,后面的方法在使用real时会失去优化的机会+=,因为必须创建新的对象。因此,这种方法必须具有很大的优势,但是MSDN却不愿透露任何信息。 我想知道这样做的好处是什么,因此,如果您在C#书籍,技术讲座视频,博客文章中发现了解释,我将不胜感激。 我发现最接近的是Eric Lippert博客上的评论为什么C#中重载运算符总是静态的?汤姆·布朗(Tom Brown)。如果首先确定了静态重载,则它仅指示可以为结构重载哪些运算符。这进一步指示了可以为类重载的内容。

3
<< >>乘法和除法的速度
当我对它们进行计时时,可以使用python中的数字&lt;&lt;进行乘法和&gt;&gt;除法,发现使用二进制移位方法比将常规方法除法或乘法快10倍。 为什么使用&lt;&lt;和&gt;&gt;比*and 要快很多/? 什么是现场处理事情,使落后*和/这么慢?

2
Python的幂运算符与右边关联的理由是什么?
我正在编写代码以解析数学表达式字符串,并注意到在Python中对链式幂运算符进行求值的顺序与Excel中的顺序不同。 从http://docs.python.org/reference/expressions.html: “因此,在无括号的幂和一元运算符序列中,运算符是从右到左求值的(这不限制操作数的求值顺序):-1 * 2得出-1。” * 这意味着,在Python中: 2**2**3被评估为2**(2**3) = 2**8 = 256 在Excel中,它的工作方式与之相反:2^2^3被评估为(2^2)^3 = 4^3 = 64 我现在必须为自己的解析器选择一个实现。Excel顺序更容易实现,因为它反映了乘法的求值顺序。 我问办公室周围的一些人,他们对评估的直觉是什么2^2^3,得到的回应不一。 有人知道有任何有利于Python实现的理由或考虑吗?如果您没有答案,请评论您从直觉中获得的结果- 64或256?

4
仅使用带有两个参数的PHP三元运算符
我最近正在查看我的一些代码,并注意到由于缺乏思想,我留下了如下结构: $guid = empty($subscription-&gt;guid) ? : $subscription-&gt;guid; 现在,这没有做应该做的事情,而且是错误的,但是由于该属性始终处于设置状态,因此它可以正常工作,并且由于以下更改,自5.3以来没有语法错误: 从PHP 5.3开始,可以省略三元运算符的中间部分。如果expr1的计算结果为TRUE,则表达式expr1?:expr3返回expr1,否则返回expr3。 我当时还没有意识到这一变化,现在我很好奇是否应该使用它。这是ruby之类的语言所无法比拟的,您可以在其中a = b || c获取b或不获取c“真实”布尔值。但是,他们为三元运算符选择的语法对我来说似乎有点不直观。我应该在生产代码中使用它吗?当我偶然看到它的时候,它肯定让我感到震惊。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.