C和C++
入门。
C++,顾名思义,是在 C 的基础上增加了很多功能。
放弃?
但不要天真的以为共有的特性都完全相同。
一个简单的例子:
int a = 1, b = 2, c = 3;
(a = b) = c;
printf("%d %d %d", a, b, c);
用 C++编译没问题:
$ clang++ test.cpp; ./a.out
3 2 3
用 C 编译却报错了:
$ clang test.c; ./a.out
error: expression is not assignable
(a = b) = c;
~~~~~~~ ^
1 error generated.
类似的
int a = 1, b = 10;
int c = a < b ? a++ : a = b;
printf("%d %d %d\n", a, b, c);
C++给出了正确的结果
2 10 1
而 C 给出了同样的expression is not assignable
错误
error: expression is not assignable
int c = a < b ? a++ : a = b;
~~~~~~~~~~~~~~~ ^
1 error generated.
进阶!
第一个例子中,用 C++,a
先被赋了b
的值2
,又变成了c
的值3
,相当于a = b; a = c;
而在 C 中(a = b)
不能赋值。
同样的第二个例子从错误信息中可以看出,a < b ? a++ : a
是被当成了一个expression
,是不能把b
的值赋给这个expression
的。