Side effects in C
Side effects in C
我认为我对编程语言的副作用的理解是可以的。
我认为这是维基百科上的一个很好的定义:
"除了返回一个值之外,它还修改一些状态与调用函数或外部世界的可观察交互。"
然而,我在同一个链接中读到了这个(是的,我知道这可能不是寻找示例的最佳地方):
"副作用行为的一个常见表现是c++中的赋值运算符。例如,赋值返回右操作数和具有将该值赋给变量的副作用。这允许语法上干净的多重赋值:"
int i, j;
i = j = 3;
为什么他们认为这是一个副作用?它相当于两个简单的赋值语句对两个局部变量。
可以使用赋值表达式作为值:
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).
x = d
产生的值是其主要作用。x
值的变化是副作用
如果世界的状态,例如变量的值,在计算中被修改,这是一个副作用。
例如,j = 3
计算3,但作为副作用,它也修改了j
的值。
一个不那么简单的例子:j += 3
计算j + 3
,但它也将j
设置为这个新值。
C语言的语义混乱:在C语言中,编写i = 1
的主要目的是获取变量赋值的副作用;不计算值1
。关于赋值作为副作用的讨论在函数式编程语言(如Haskell或Erlang)中更有意义,在这些语言中变量只能赋值一次。
我认为这是因为j = 3
具有将值3
赋值给j
的预期效果,但同时具有返回 j
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Softmax Implementation in C++
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- IF-nesting in c++
- Gurobi GRBModel and GRBmodel in C++
- Tensorflow Hub in C++
- Centos7 g++ "to_string is not in a member of std"
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- 将 lambda 表达式传递给 std::function in C++
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- Side effects in C