看完后隐藏功能和C++/STL的暗角上comp.lang.c++.moderated,我完全惊讶的是,下面的代码片断编译并在两个Visual Studio 2008和G ++ 4.4的工作.
这是代码:
#include <stdio.h>
int main()
{
int x = 10;
while (x --> 0) // x goes to 0
{
printf("%d ", x);
}
}
Run Code Online (Sandbox Code Playgroud)
我假设这是C,因为它也适用于GCC.标准中定义了哪里,它来自何处?
++和 -
已知++(增量)和 - (减量)运算符通过鼓励过多的诡计来导致错误的代码.它们仅次于故障架构,可以实现病毒和其他安全威胁.有一个plusplus选项禁止使用这些运算符.
我知道像PHP这样的PHP结构$foo[$bar++]可能很容易导致一个错误,但是我无法找到一个更好的方法来控制循环而不是一个while( a < 10 ) do { /* foo */ a++; }或for (var i=0; i<10; i++) { /* foo */ }.
jslint是否突出显示它们是因为有些类似的语言缺少" ++"和" --"语法或者处理方式不同,还是有其他理由可以避免我可能会丢失的" ++"和" --"?
所以我看了一下在SO广告页面上控制计数器的代码.然后我看到了发生这种情况的线i-->.这是做什么的?
这是完整的代码:
$(function(){
var visitors = 5373891;
var updateVisitors = function()
{
visitors++;
var vs = visitors.toString(),
i = Math.floor(vs.length / 3),
l = vs.length % 3;
while (i-->0) if (!(l==0&&i==0)) // <-------- Here it is!!!
vs = vs.slice(0,i*3+l)
+ ','
+ vs.slice(i*3+l);
$('#devCount').text(vs);
setTimeout(updateVisitors, Math.random()*2000);
};
setTimeout(updateVisitors, Math.random()*2000);
});
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
public class Operators {
public static void main(String[] args) {
int i =+ 2;
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
执行后,我得到以下输出:2
那么=+运营商在这里做了什么呢?
编辑:
正如一些回答,这是分配+2到i,考虑下面的代码:
public class Operators {
public static void main(String[] args) {
int i =- -2;
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
所以在上面的例子中,输出应该是-2.但我得到了2
所以我想,它是-(-2),它给出了2.对吗?
我在带有编译器的库中遇到了这个问题:
register char *bufptr;
register int neg = val < 0;
register long uval = val;
*(bufptr = &tempc[BUFLEN - 1]) = 0;
do {*--bufptr = abs(uval % 10) + '0';} while(uval /= 10);
Run Code Online (Sandbox Code Playgroud)
"* - "实际上做了什么?我尝试搜索它,但它不包括在我能找到的C引用中,搜索引擎不喜欢"* - ".