C中的副作用

Cac*_*nta 2 c c++ side-effects

我认为我对编程语言中的副作用的理解是可以的.

我认为这是维基百科的一个很好的定义:

"除了返回一个值,它还会修改某个状态或与调用函数或外部世界进行可观察的交互."

但是,我在同一个链接中读到了这个(是的,我知道这可能不是寻找示例的最佳位置):

"副作用行为的一个常见示例是C++中的赋值运算符.例如,赋值返回正确的操作数,并且具有将该值赋给变量的副作用.这允许语法上干净的多重赋值:"

int i, j;
i = j = 3;
Run Code Online (Sandbox Code Playgroud)

为什么他们认为有副作用?它与2个局部变量的两个简单赋值语句相同.

提前致谢.

Eri*_*hil 11

您可以将赋值表达式用作值:

double d = 3.5;

int x, y;

printf("%d", x = d); // Prints "3".

y = (x = d) * 5; // Sets y to 15.

double z = x = d; // Sets z to 3 (not 3.5).
Run Code Online (Sandbox Code Playgroud)

从中返回的值x = d是其主要影响.价值的变化x是副作用.


Jon*_*oni 5

如果在计算中修改了世界状态(例如变量的值),那是副作用。

例如,j = 3计算3,但它也修改j了副作用的值。

一个比较简单的示例:j += 3计算j + 3,但它也设置j为此新值。

C的语义使情况更加混乱:在C中,写作的主要目的i = 1是获得变量赋值的副作用。不计算值1。使用诸如Haskell或Erlang之类的功能编程语言来讨论将副作用作为赋值更为有意义,在这些语言中,变量只能赋值一次。