- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这样定义,我们既不能做++x++
也不能做++x--
。但另一方面,(++x)++
和 (++x)--
都是有用的表达式:(++x)++
将 x
增加 2 并返回“中间”的值,而 (++x)--
本质上等同于 x+1
但完全避免必须调用 operator+
,这有时非常有用。
那么为什么没有定义优先级让 ++x++
自动扩展为 (++x)++
而不是 ++(x++)
?后者是否有一些我不理解的隐藏含义,或者只是为了将优先级保持为一个简单的列表,所有前缀运算符构成一个级别?
编辑 好吧,我没有明确说出来,但是:当然我的意思是 x
是用户定义的类型。对于内置类型,(x+=2)-1
当然优于(++x)++
,而x+1
比 (++x)--
好很多。我想到的情况是一个相当复杂类型的半关联容器的迭代器,其中运算符 +=
和 +
(为随机访问而设计)必须重建缓存以便有效地处理一般请求,因此比 ++
慢一个数量级。但是我当然可以修改它们以始终首先检查参数是否是一个非常小的整数,在这种情况下只需重复调用 operator++
而不是执行随机访问过程。这在这里应该可以正常工作,尽管我可以想象在某些时候我可能会遇到这样一种情况,即我希望 operator+=
始终采用随机访问方式,无论我提供的数字有多小。
the advantage of having a simple and well-memorizeable precedence list in which all postfix operators come before any of the prefix operators is sufficient to tolerate the minor drawback of always having to use parentheses to compose pre- and postfix operators
++
/--
, as this composition is used very seldom.
更简单的“C 这样做”,虽然它看起来可能是真正的原因,但对我来说远不令人满意,因为自从 ++x++
在 C 语言中根本是不允许的,因此可以在不损坏任何现有代码的情况下重新定义这种组合。
无论如何,我会继续使用(++x)--
,因为括号确实没有那么大的伤害。
最佳答案
(++x)++
incrementsx
by two and returns the value "in the middle"
为什么不是 (x += 2) - 1
或 (++x, x++)
?两者似乎都更清楚。对于标量,两者在 C++03 中也有明确定义,这与您建议的表达式相反。
(++x)--
is essentially equivalent tox+1
but completely avoids having to calloperator+
, which can be quite useful sometimes.
这是一个武断的说法,没有任何解释。所以我要扔进游泳池:
x+1
is essentially equivalent to(++x)--
but completely avoids having to calloperator++
andoperator--
which can be useful sometimes.
So why is the precedence not defined to have ++x++ automatically expand to (++x)++ rather than ++(x++)
只是为了让这些神秘的角落案例不出错?没门。你能为我背诵man operator
吗?如果你做不到,最好不要尝试在代码中编写 ++x++
。
关于c++ - 为什么后缀运算符++的优先级高于前缀运算符++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6086643/
这似乎是一个愚蠢的问题,但为什么在许多语言中存在 ++ 和 -- 运算符的前缀和后缀版本,但是没有类似 += 或 -= 等其他运算符的前缀/后缀版本?例如,如果我能写出这段代码: myArray[x+
我需要链接到第三方预建共享库。在 Windows 上,这意味着与 Third_party.lib 链接,在 Linux/Android 上,这意味着与 libThird_party.so 链接。所以为
我正在学习 C++ 中的运算符重载。原始后缀++ 的特性是它的优先级低于赋值运算符。例如,int i=0, j=0; i=j++; cout using namespace std; class V
如何在文本区域中添加每行前缀.. 示例: 这是文本区域的内容: hello124 我想为每一行添加一个 [b] 前缀和后缀,这样当我点击一个按钮时,结果将是: [b]hello[/b] [b]124[
背景:在传统的逆波兰表示法中,所有运算符都必须具有固定长度,这使得 RPN 可以很容易地被代码评估和操作,因为每个标记、表达式和子表达式都是“自包含”的,以至于人们可以盲目地替换 y在 x y *为
我有以下旨在修改日期格式的Javascript,但是我想添加原始日期或后缀,例如“st”,“nd”,“rd”,“th”到每个结束日期编号。例如,假设我们当前的日期设置为 4 月 28 日,但我想将日期
我想制定一个 header 检查规则来添加回复并将“发件人”更改为“不回复”。我将它用于某种扩散列表地址 我试过这个正则表达式代码,但它不起作用: if !/^From:(.+@myserver\.f
我想改变数据框的列内容,以便单元格内容以列名作为前缀: > x x VarX VarY 1 A C 2 B D 3 A C 4 B D > x$V
当我执行 ipconfig/all 时,我看到 DNS 后缀搜索列表。我需要从 java 中检索该值。有谁知道如何获得它或它从哪里来? 最佳答案 DNS 后缀列表读取自 HKLM\SYSTEM\Cur
当您编写一个包含大量类的应用程序时,您是否为类名使用了前缀/后缀?还是我应该只依赖我已经定义的 namespace ? 在我的例子中,我有这样的类: Blur Contrast Sharpen Inv
大多数浏览器会像这样显示有序列表: 1. foo 2. bar 3. baz 有没有办法更改编号以改为使用前缀: #1 foo #2 bar #3 baz 最佳答案 这是我能想到的最好的,你只在 Fi
我需要批量重命名多个图像,并希望使用父目录作为基本名称。为防止一个覆盖另一个,必须添加后缀。重命名过程的顺序必须遵循文件的时间戳。因为“第一个”文件是我正在使用它的网站的特色图片。 树: └── ma
我试图使用 sed 替换文件中的一些字符串,但遇到了一个问题。 我有以下字符串: TEMPLATE_MODULE TEMPLATE_SOME_ERR TEMPLATE_MORE_ERR 我想用一些字符
我对后缀/前缀运算符的优先级 和关联性 感到困惑。 一方面,当我阅读 K&R 书时,它指出: (*ip)++ The parentheses are necessary in this last ex
我有一个具有以下结构的图 V = {A1, A2, A3, A4, A5, .., An} E = {E1, E2, E3, E4, .., Ek} 现在我们定义A1的后缀: S(A1) = {All
这是解释性代码。语言是Java,代码使用Android。 fg.setTextSize(height*0.50f); //<-'f' is in the brackets 或 @Override pr
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我正在编写自己的数组类作为练习。因为,我读到非成员函数实际上在某些方面比成员函数更好。( Scott Meyers ) 我正在尝试编写尽可能多的运算符重载作为非成员函数。运算符重载 + , - 作为非
谁能解释一下关于 C 编程语言的中缀、后缀和前缀表示法是什么? 最佳答案 这是对 three terms, and how they apply 的一个很好的讨论. C 语言几乎到处都使用中缀表示法。
我有这种情况:我需要在输入文本字段 (html) 中添加引号而不更改输入的值。我正在使用 angular,所以我使用 ngModel,它看起来像这样 我希望输入字段显示“{{data}} 中的任何内
我是一名优秀的程序员,十分优秀!