我曾经一直以为 C/C++ 中赋值语句的返回值不是 0 就是 1 —— 成功执行赋值操作返回 1,没有成功执行就返回 0。直到今天课上的一个例子,才让我知道,原来赋值语句的返回值就是赋的值的大小!
起因是下边的这道题目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| int i;
for (i = 0;; i++) { printf("%d", i); }
for (; i = 0; i++) { printf("%d", i); }
for (i = 0; i < 0; i++) { printf("%d", i); }
while (i = 1) { i++; }
|
第一个因为 for 语句的第二个参数缺失,所以该循环不会停止;第三个初值 i=0;
即不满足 i<0;
,故不执行。
第四个,按照我错误的理解,赋值成功返回 1,所以说得通是 while(true)
永远执行,但四二个却无法这么解释了。去试了试写个下边两个东西输出赋值语句的返回值,才发现原来赋值语句的返回值就是赋的值。
C 代码:
1 2 3 4 5 6 7 8 9 10
| #include <stdio.h>
int main() { int a = 0, b = 5, c = -5, d; printf("%d\n", (int)(d = a)); printf("%d\n", (int)(d = b)); printf("%d\n", (int)(d = c)); return 0; }
|
C++ 代码:
1 2 3 4 5 6 7 8 9 10 11 12
| #include <iostream>
using namespace std;
int main() { int a = 0, b = 5, c = -5, d; cout << int(d = a) << endl; cout << int(d = b) << endl; cout << int(d = c) << endl; return 0; }
|
输出结果均如下: