问题标签 [prefix-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
7082 浏览

c++ - 如何区分(重载时)运算符++的前缀和后缀形式?(C++)

因为我已经operator++为迭代器类重载了

但是当我尝试做

我收到关于没有 postifx 的警告++,使用前缀形式。我怎样才能特别重载前缀/后缀形式?

0 投票
18 回答
353730 浏览

javascript - 为什么要避免 JavaScript 中的递增(“++”)和递减(“--”)运算符?

工具提示之一jslint是:

++众所周知,--
( ++increment) 和--(decrement) 运算符会通过鼓励过多的技巧来导致糟糕的代码。它们在启用病毒和其他安全威胁方面仅次于错误的架构。有一个 plusplus 选项禁止使用这些运算符。

我知道像这样的 PHP 结构$foo[$bar++]很容易导致错误,但我想不出比以下更好的方法来控制循环:

或者

突出显示它们是jslint因为有一些类似的语言缺少“ ++”和“ --”语法或处理方式不同,还是有其他理由可以避免我可能遗漏的“ ++”和“ ”?--

0 投票
7 回答
3442 浏览

c# - 一条语句中的索引、赋值和增量在 C++ 和 C# 中的行为不同。为什么?

为什么这个代码示例在c++C#中表现不同。

[C++ 示例]

结果将是arr[1] = 1

[C# 示例]

结果将是arr[0] = 1

我觉得这很奇怪。当然,两种语言都必须有一些理由来以不同的方式实现它吗?我想知道C++/CLI会输出什么?

0 投票
1 回答
1373 浏览

c++ - C++中前缀和后缀的返回值

为什么在 C++ 中前缀返回引用但后缀返回值?

0 投票
4 回答
2661 浏览

haskell - Haskell中一元运算符的前缀形式

在 GHCi 中:

  1. 前奏> (+3) 2
    5
  2. 前奏> (*3) 2
    6
  3. 前奏>(/3)2
    0.6666666666666666
  4. Prelude> (-3) 2
    (Num (t -> t1))
    没有由字面 it' 产生的实例:it = (- 3) 23' at <interactive>:1:2
    Possible fix: add an instance declaration for (Num (t -> t1))
    In the expression: 3
    In the expression: (- 3) 2
    In the definition of

如何更正最后一个以使其返回-1?

0 投票
3 回答
4491 浏览

c++ - 为什么后缀运算符++的优先级高于前缀运算符++?

以这种方式定义,我们既不能做++x++也不做++x--。但另一方面,(++x)++and(++x)--都是有用的表达式:(++x)++递增x2 并返回“中间”的值,while(++x)--本质上等同于x+1但完全避免了调用operator+,这有时非常有用。

那么为什么优先级没有定义为++x++自动扩展为(++x)++而不是++(x++)?后者是否有一些我不理解的隐藏含义,或者只是为了将优先级保持为一个简单的列表,所有前缀运算符构成一个级别?

编辑好吧,我没有明确说出来,但是:当然我的意思x是用户定义的类型。对于内置类型,(x+=2)-1当然比(++x)++,而且x+1比. 我想到的情况是一种相当复杂的半关联容器类型的迭代器,其中操作员和(设计用于随机访问)必须重建缓存才能有效地处理一般请求,因此是一个命令幅度比 慢。但是当然我可以修改它们以始终首先检查参数是否是一个非常小的整数,在这种情况下只需调用(++x)--+=+++operator++重复而不是执行随机访问过程。这在这里应该可以正常工作,尽管我可以想象我可能会在某个时候遇到这样一种情况,即我想operator+=始终采用随机访问方式,而不管我呈现的数字有多小。


所以......对我来说,我的结论是:

拥有一个简单且易于记忆的优先级列表(其中所有后缀运算符都位于任何前缀运算符之前)的优势足以容忍始终必须使用括号来组合前置和后置运算符++/的小缺点--,因为这种组合是很少使用。

更简单的“C 这样做”,虽然这似乎是真正的原因,但对我来说远没有那么令人满意,因为因为在 C++x++中根本不允许所以可以重新定义这个组合而不破坏任何现有代码。

无论如何,我会继续使用(++x)--,因为括号真的没有那么大的伤害。

0 投票
4 回答
548 浏览

c++ - 编译器如何解释 preincrement/decrement 和 postincrement/decrement

当有人询问后自增/自减和前自增/自减之间的区别时,答案通常是前缀版本将变量加一并返回变量的新值,而后缀版本将变量加一并且返回旧值。

在胡闹的时候,我发现所有这些行都是合法的:

但以下行都不合法:

如果我假设前缀版本通过引用返回,这一切都是有道理的(即使是最后一个示例,因为后缀的优先级高于前缀)。

前缀版本返回引用而后缀版本返回值的假设/实现是否正确?对于 pre/post inc/decrement 运算符,是否还有其他我不知道的细微行为差异?

0 投票
13 回答
151308 浏览

c - 前缀和后缀运算符有什么区别?

下面的代码打印出一个值 9。为什么?这里return(i++)将返回一个 11 的值,由于--i该值本身应该是 10,任何人都可以解释它是如何工作的吗?

0 投票
3 回答
862 浏览

c# - 为什么后缀 ++/-- 在 C# 中被归类为主要运算符?

目前,我正在向一班 C++ 程序员教授 C# 语言的基础知识。在我们讨论主题运算符时,我使用了 C# 标准类别的主要运算符、一元运算符等。

其中一位与会者感到困惑,因为在 C# 标准中,“后缀 ++/--”已被置于主要运算符的类别中,而不是“前缀 ++/--”。她造成这种混淆的理由是,她宁愿根据运算符“前缀 ++/--”来实现 C++ 运算符“后缀 ++/--”。换句话说,她宁愿将运算符“前缀++/--”算作主要运算符。- 我理解她的观点,但我不能给她一个背后的理由。好的,运算符“postfix ++/--”的优先级高于“prefix ++/--”,但这是唯一的理由吗?

规范在“14.2.1 运算符优先级和关联性”一节中提到了它。

所以我非常中性的问题:为什么后缀 ++/-- 在 C# 中被归类为主要运算符?这里面有更深的真相吗?

0 投票
4 回答
20696 浏览

c++ - 重载后缀和前缀运算符

请考虑以下代码

这里实现了两个版本的后缀和前缀运算符,我已经读到通过引入另一个所谓的虚拟参数来产生差异,但我有疑问,如果我们看到这些声明

它们的区别在于 & 标记,那么为什么需要虚拟参数?而且在这两种情况下,例如 ++ 运算符都写在参数之前,这不意味着它们是相同的吗?