Several unary operators in C and C++
使用诸如
如何确定i变量的符号?
- 你为什么不亲自检查?
- @你说的检查是什么意思?
- 编译器甚至可以优化这一行:+-+-+i;。
- LeeNeverGup:因为C++有一个提醒我们的坏习惯,仅仅因为你不能表示它是合法的。但是,在这种情况下,是的。这个标志将按你所期望的方式决定。
- 就语言标准而言,是的,它是符合的。对于编码标准,答案应该是"地狱,不!".
是的。一元+和-从右向左关联,因此表达式被解析为
结果产生了1。
请注意,这些可能会被重载,因此对于用户定义的类型,答案可能会有所不同。
- 结果发现,不管它们的解析顺序是什么,因为一元否定和实证主义是与整型相关联的。
- @在这种情况下,没有。它可能会被完全排除。
- 如果它们是左联想的呢?会是((((+-)+)-)+)i吗?这是胡说八道,我不会称它们为右联想的,或者以任何方式联想的。
- @如果世界是平的呢?不管你喜欢与否,它们都是右联想的。
- 左/右关联性是可以指定给二进制运算符的属性。一元的没有意义。
- @avakar en.cppreference.com/w/cpp/language/operator_优先级
- 由于lexer的工作方式(它总是试图形成尽可能长的令牌),+++解析为++ +。我不知道关联性与此有什么关系。
- @阿瓦卡经过进一步的调查-你说得对-但参考资料仍然有效。实际上,这可能是个好问题。
- 一元运算符可以是前缀或后缀。你可以把所有的前缀操作符都称为"右关联"和所有的后缀操作符都称为"左关联",但这几乎没有什么价值,而且我从来没有听说过这样的术语。至于您的参考,请注意,它不是来自标准的引用,运算符优先级和关联性隐式来自语法。
- @阿瓦卡啊-看stackoverflow.com/a/12961372/673730这是一个很好的观点。如果它是左联想-(--x)++vs --(x++)。还是我错过了什么?
- 好吧,那不是关联性,那是优先权。在++x++中,两个++实际上是不同的运算符。
- @阿瓦卡是的,在另一个问题的答案中看到了这一点。
您的运算符没有副作用,+i与int本身无关,您不使用临时生成值,而是删除不做任何事情的+,您的-(-i)开关等于i。(代码中删除+将转换运算符,我的意思是在计算中删除它,因为它没有效果。CT)
- 如果你移除了+,你就只剩下--i,这是完全不同的情况。
- @Luchiangrigore请再次阅读我的答案。我已经在我的答案末尾解决了这个问题。
- 您的意思是"代码中的removing+将转换运算符,我的意思是在计算中删除它,因为它没有效果"?是啊。。。我不明白,但如果这就是你的意思,那好吧…
EDCOX1 0不被修改(C:没有介入序列点C++):不合法的,所以它是合法的。您只是为每个运算符创建一个新的临时。
一元+甚至什么都不做,所以你所拥有的只是两个否定,这两个否定只给了1这个表达。变量i本身是不变的。