标签: decrement

将增量/减量运算符放在三元/条件运算符中是否安全?

这是一个例子

#include <iostream>
using namespace std;
int main()
{   
    int x = 0;
    cout << (x == 0 ? x++ : x) << endl; //operator in branch
    cout << "x=" << x << endl;
    cout << (x == 1 || --x == 0 ? 1 : 2) << endl; //operator in condition
    cout << "x=" << x << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

0
x=1
1
x=1
Run Code Online (Sandbox Code Playgroud)

我理解输出,但这是不确定的行为?在任何一种情况下,评估顺序是否得到保证?

即使有保证,我也非常清楚使用递增/递减会很快成为可读性的问题.我只是问我看到类似的代码并且立即不确定,因为有很多关于递增/递减运算符的模糊/未定义使用的示例,例如......

c c++ increment ternary-operator decrement

26
推荐指数
3
解决办法
4436
查看次数

为什么INC和DEC指令*不影响进位标志(CF)?

为什么x86指令INC(递增)和DEC(递减)不影响CFFLAGSREGISTER中的(进位标志)?

x86 assembly flags increment decrement

18
推荐指数
2
解决办法
1万
查看次数

如何在Perl对象中定义前/后增量行为?

Date::Simple对象显示此行为,$date++返回第二天的日期.

Date ::简单对象是不可变的.将$ date1分配给$ date2后,$ date1的更改不会影响$ date2.这意味着,例如,没有像set_year操作,$ date ++将新对象分配给$ date.

如何自定义对象的前/后增量行为,以便执行++$object$object--执行特定操作?

我已经浏览了perlboot,perltoot,perltoocperlbot,但我没有看到任何显示如何做到这一点的例子.

perl object decrement

14
推荐指数
2
解决办法
401
查看次数

TRANSACTION,COMMIT和ROLLBACK上的MySQL自动递增列

当使用MySQL START TRANSACTION并由MySQL做出回滚决定时 - 如果一个表有一个AUTO_INCREMENT列 - 在回滚期间列是否会减少?

还是应该呢?

我遇到了一些问题,其中事务数据正在被正确回滚 - 但看起来表是自动递增的并且在回滚中没有减少.


# BOTH TABLES START OUT EMPTY // TABLE1 ID is **auto_increment** 

START TRANSACTION;

INSERT INTO `TABLE1` (`ID` ,`NAME`) VALUES (NULL , 'Ted');  # MySQL TABLE1 **ID** is Auto incremented to 1 

INSERT INTO `TABLE2` (`ID` ,`WRONGVALUE`) VALUES (NULL , 'some value');  # error. This TRANSACTION will not succeed 

COMMIT;  # Because of the error - this TRANSACTION is now rolled back and Ted is NOT added
Run Code Online (Sandbox Code Playgroud)


因为MySQL会自动增加第一个表上的ID - 无论事务成功还是失败 …

mysql transactions auto-increment decrement

14
推荐指数
1
解决办法
7394
查看次数

为什么Knuth使用这个笨重的减量?

我正在看一些Don Knuth教授的代码,用CWEB编写,转换为C.具体的例子是dlx1.w,可从Knuth的网站获得

在一个阶段,struct nd [cc]的.len值递减,并且以一种笨重的方式完成:

  o,t=nd[cc].len-1;
  o,nd[cc].len=t;
Run Code Online (Sandbox Code Playgroud)

(这是一个特定于Knuth的问题,所以也许你已经知道"o"是一个预处理器宏,用于递增"mems",这是通过访问64位字来衡量的累计工作量.) "t"中剩余的值绝对不会用于其他任何事情.(此处的示例位于dlx1.w的第665行,或者是ctangle之后的dlx1.c的第193行.)

我的问题是:为什么Knuth这样写,而不是

nd[cc].len--;
Run Code Online (Sandbox Code Playgroud)

他确实在其他地方使用过(dlx1.w第551行):

oo,nd[k].len--,nd[k].aux=i-1;
Run Code Online (Sandbox Code Playgroud)

(而"oo"是一个类似的宏,用于递增"mems"两次 - 但这里有一些细微之处,因为.len和.aux存储在相同的64位字中.为S.len和S分配值. aux,通常只计算mems的一个增量.)

我唯一的理论是减量包括两个内存访问:首先查找,然后分配.(这是正确的吗?)这种写作方式提醒了这两个步骤.这对于Knuth来说会非常冗长,但也许这是一种本能的备忘录,而不是说教.

为了它的价值,我在没有找到答案的情况下搜索了CWEB文档.我的问题可能更多地与Knuth的标准实践有关,我正在逐渐采用.我会对这些实践被布局(并且可能被批评)作为一个块的任何资源感兴趣 - 但是现在,让我们关注为什么Knuth以这种方式编写它.

c knuth increment literate-programming decrement

12
推荐指数
1
解决办法
235
查看次数

C语言有预增量和后增量的历史原因是什么?

(注意:我不是在询问预增量与后增量的定义,或者它们在C/C++中的使用方式.因此,我不认为这是一个重复的问题.)

C的开发人员(Dennis Ritchie等人)出于很好的理由创建了增量和减量运算符.我不明白为什么他们决定创造前后增量/减量的区别?

我的感觉是,当C开发时,这些运算符比今天更有用.大多数C/C++程序员使用其中一种,而来自其他语言的程序员今天发现这种区别奇怪且令人困惑(注意:这完全基于轶事证据).

他们为什么决定这样做,以及计算上发生了什么变化,这种区别今天没那么有用?

为了记录,可以在C++代码中看到两者之间的差异:

int x = 3;

cout << "x = 3; x++ == " << x++ << endl;
cout << "++x == " << ++x << endl;
cout << "x-- == " << x-- << endl;
cout << "--x == " << --x << endl;
Run Code Online (Sandbox Code Playgroud)

将作为输出

x++ == 3
++x == 5
x-- == 5
--x == 3
Run Code Online (Sandbox Code Playgroud)

c c++ pre-increment post-increment decrement

10
推荐指数
2
解决办法
1010
查看次数

从java中的另一个线程访问线程的变量

我试图在java中的另一个线程中访问和修改线程的变量,我真的不知道如何做到这一点.

例如:

Runnable r1 = new Runnable() {
    int value = 10;
    public void run() {
        // random stuff
    }
}
Runnable r2 = new Runnable() {
   public void run() {
        // of course the bellow line will not work
        r1.value--; // I want here to be able to decrement the variable "value" of r1
    }
}
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
Run Code Online (Sandbox Code Playgroud)

谢谢你,如果你有任何想法!

有没有办法在java中为线程创建一个getter和setter?

编辑:答案很好,但我不清楚我的问题,我会尝试提出一个更好的问题

java setter multithreading decrement

9
推荐指数
2
解决办法
3万
查看次数

++或 - 增量或减速器速度比较

同学向我提到他读的减量器 (--)应该比增量器 (++)更快地执行操作.我们使用JavaScript进行了测试,得出混合结果.

在我的MacBook Pro酷睿i5(2014年中期),++快了近3倍--使用console.time方法登录的差异,并在Firefox中 ++只是勉强挤掉--.

他的Windows笔记本电脑上(不确定型号),几乎完全相反,--在浏览器中速度更快.

那么发生了什么?这是硬件还是软件?有什么区别以及为什么一个或另一个以更高或更低的速度运行?

这里的问题是为什么不同的机器有区别? 比较为0似乎是一个明显的答案,为什么我们看到我的MacBook上的减量速度较慢,但​​它并没有解释为什么它在窗口的机器上实际上更快.

我们预计两种情况下的减量都会变慢,只是测试差异,然后我们想出了这个奇怪的结果.因此这个问题.

javascript performance increment time-complexity decrement

8
推荐指数
0
解决办法
100
查看次数

在Java中,为什么我不能编写i ++++或(i ++)++?

当我尝试在/减量中写一个后缀/前缀,然后在/减量中写一个post /前缀时,我得到以下错误:操作++/ - 的参数无效.

但是,据JLS称:

PostIncrementExpression:
        PostfixExpression ++
Run Code Online (Sandbox Code Playgroud)

PostfixExpression:
        Primary
        ExpressionName
        PostIncrementExpression
        PostDecrementExpression
Run Code Online (Sandbox Code Playgroud)

所以写:

PostfixExpression ++ ++
Run Code Online (Sandbox Code Playgroud)

应该可能......有什么想法吗?

java increment jls decrement

7
推荐指数
3
解决办法
3756
查看次数

C++中递增和递减opreator的优先级

我在我的gcc上尝试过这个:

int a=1;
cout<<(--a)--;
Run Code Online (Sandbox Code Playgroud)

输出为0; 但改成它

cout<<--(a--);
Run Code Online (Sandbox Code Playgroud)

导致错误(减值操作数需要左值).有人可以告诉我这件事吗?

谢谢!

c++ increment decrement

7
推荐指数
2
解决办法
981
查看次数