编程:从入门到放弃
    前言
    语言和环境
    +=
    C和C++
    Hex
    Map
    Scope(1):"这"是啥
    Scope(2)
    Singleton
    什么顺序
    从A到Z
    函数
    切分字符串
    初始化(1)
    初始化(2)
    单引号,还是双引号
    参数传递
    左,还是右
    引用
    时间(1)
    时间(2)
    时间(3)
    时间(4)
    时间(5)
    比大小
    流氓甘地
    相等,还是不等(1)
    相等,还是不等(2)
    相等,还是不等(3)
    相等,还是不等(4)
    第一个说了算,还是最后一个
    语言和环境
    除以0
    随机数

C和C++

Updated: 2021-12-12

入门。

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