在它自己的定义中,后缀运算符是在其所有操作数之后指定的运算符.
在C11标准中,后缀运算符定义为:
6.5.2邮政运营商
句法
Run Code Online (Sandbox Code Playgroud)post?x-expression: primary-expression post?x-expression [ expression ] post?x-expression ( argument-expression-listopt ) post?x-expression . identi?er post?x-expression -> identi?er post?x-expression ++ post?x-expression -- ( type-name ) { initializer-list } ( type-name ) { initializer-list , }
标准两个部分之前和之后的调用.,并->为操作数,这是我用粗体突出表现在以下报价.它是否意味着.并且->实际上是中缀运算符,尽管在标准中被称为后缀运算符?
6.5.2.3结构和工会成员
约束
1 的第一个操作数 .运算符应具有原子,限定或不合格的结构或联合类型,第二个操作数应指定该类型的成员.
2 - >运算符的第一个操作数应具有类型''指向原子,限定或不合格结构的指针''或''指向原子,合格或不合格的联合'的指针, 第二个操作数应指定一个成员.类型指向.
对于小节 [],()和复合文字不提字"操作数".所以
[] 和()两个一元的后缀运算符,在它们之前有一个(函数)指针名称作为它们的唯一操作数,以及内部[]和()不是操作数的内容?这是正在进行的回复所说的在函数调用中,运算符是什么,操作数是什么?(), …我们要表达
if ((option & SERVER_OPTIONS::VALUE) == SERVER_OPTIONS::VALUE)
...
if ( option & SERVER_OPTIONS::VALUE == SERVER_OPTIONS::VALUE )...
Run Code Online (Sandbox Code Playgroud)
为什么相同的值option有不同的结果?
看下面这个小片段的js:
var a = 1;
if(! (--a)) { // when i say --a i did't mean to say "change the value of a" i just meant to say "without manupulating the actual value of a , just check if --a is falsy"
console.log('ok');
}
console.log(a); // 0 ... WHY ? i never intended to change the value of a
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么当我没有明确地设定a --a的值时,是否正在被人类化的价值?在代码中存在的if条件中我真的并不是说实际上减少了a的值,它只是一个if check我教过并且会改变它的值a.
我猜,我显然是错的.我只是想知道,这只是一个javascript的东西,还是所有编程语言共同的?(IE能够在if条件中处理变量的值,实际上你想要做的只是临时管理变量的值而不是改变实际值.)
PS: 对不起,如果这个问题听起来真的很琐碎,但对我来说很重要.
编辑:没有要求解释a - 和--a如何工作,我想知道为什么:
计划一:
var a = 1;
--a;
console.log(a) // my …Run Code Online (Sandbox Code Playgroud) !<number>c中的含义是什么。例如!-2还是!3?
cout << !-2;
Output:
0
cout << !3;
Output:
0
Run Code Online (Sandbox Code Playgroud) System.out.println(100% - 40);
Run Code Online (Sandbox Code Playgroud)
请解释编译器解决此问题的步骤。
就像我所了解的那样,%是一个需要两个操作数才能工作的运算符,但是在这种情况下,它如何接受另一个像“-”这样的运算符呢?
我已经编写并编译了以下代码:
void main()
{
printf("%d", -10 & 5);
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它输出值4。为什么该程序的输出为4?
c bit-manipulation operators bitwise-operators negative-number
在Perl我知道,我们可以使用"$x *= $n"用于乘x用n.所以我错误地使用"**="和输出似乎是非常高的数字非常小的值"n".那个运营商做什么?
请不要说这只是指数级的.它不是.请使用我显示的语法验证
我刚刚在SO上找到了答案,其中一个代码示例(我认为是java)使用了一个我以前从未见过的运算符:^=.我搜索谷歌和SO并且无法在其他任何地方找到它,当我尝试使用java测试时,eclipse发疯了.也许这只是答案中的一个错字,我不确定.这个运营商是什么?它有名字吗?它的用语是什么?
"."之间有什么区别?访问C结构中的数据时," - >"?我几次尝试都找不到任何区别.两者都为我提供了对欲望数据的访问
我在一个我开始研究的项目中遇到了这段代码.最初的开发人员已经不再可用,我无法理解它.
k = (j = (i = 0) + 2) + 1;
return i|= j|= k|= (j+= i) - - (k+++k) - - (i =+j);
Run Code Online (Sandbox Code Playgroud)
它产生的价值11.这是如何运作的?
什么是=+运营商?
什么是+++运营商?
什么是- -运营商?
什么是|=运营商?
条件运算符===和赋值运算符=之间的性能是否存在差异?我正在用猫鼬写一些预保存的钩子中间件,我想知道是否有很大的速度差异:
UserSchema.pre('save', function (next) {
if (!this.isModified()) {
return next();
}
this.crm.isUpToDate = false;
next();
});
Run Code Online (Sandbox Code Playgroud)
和
UserSchema.pre('save', function (next) {
if (!this.isModified()) {
return next();
}
if (this.crm.update === true) {
this.crm.isUpToDate = false;
}
next();
});
Run Code Online (Sandbox Code Playgroud)
编辑:
感谢您的建设性意见.
基本上,它看起来并没有太大的性能差异(如上所述它可以忽略不计).感谢http://jsperf.com/测试速度的酷工具,我以前从未听说过它.
对于那些想知道代码的人,首先我在原帖中犯了一个明显的错误,然后当每个人都试图向我指出我哭了,这可能是每个人都投票的原因.
这是我在做的事情:
我有一个mongoose预保存中间件挂钩(用于mongo数据库),每次保存文档时都会运行挂钩.在保存时,我检查文档是否已更新.如果是我将其设置crmIsUpToDate为false.crmIsUpToDate当cron作业到达时,将设置为true.在cron作业到达文档之前,可以多次运行此挂钩.
我认为这不是问题的必要条件,因为问题在于进行比较===和做作业之间是否存在差异=.我甚至不应该把代码放上去,因为它确实减少了主要问题.
operators ×11
c ×4
java ×3
c++ ×2
javascript ×2
accessor ×1
equality ×1
expression ×1
modulo ×1
performance ×1
perl ×1
struct ×1