C和C++

Updated: 2019-01-07

入门

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的。