Larry Weiss 写道
> FAQ 20.27 承诺“一些合法的 C 结构在 C++ 中是不合法的”。我想看到一些这样的例子。
> 我想看到一些这样的例子。
FAQ 中所说的 C 是指当前语言,我猜我们现在仍然是这样认为的,而不是 C9x 的提案。
有很多这样的情况。我曾经列过一个相当大的列表,但现在不记得了。不过,你只是要求例子
1) 从void *到任何对象/不完整类型的自动转换
void *one; char *two =one;
2) 新的关键字(许多)
int new;
3) 由于结构体变成了作用域
struct x { struct y { int z; } w; }; struct y v;
4) 由于结构体标签变成了 typedef
struct y {int z;}; int f(int(y)); f(3);
5) 由于需要原型
int f(); f(3);
6) 隐式的 int 规则
main(){}
7) main 函数的递归调用
8) 由于 // 注释
int x = 2//*why???*/2; int y;
> FAQ 20.27 还承诺“这两种语言对一些常见构造的含义
> 定义也不同”。我想看到
> 一些这样的例子。
一些我立即想到的例子
1) 由于 // 注释
int x = 2//*why???*/2 ;
2) 由于字符字面量的类型char而不是int等等。
所以,如果 sizeof(int) != 1,
sizeof('a')这两种语言就存在差异
3) 由于结构体作用域
struct y {int z;}; { struct x { struct y { char z; } w; }; struct y v; return sizeof v.z; }
此外,有很多 C 编译器需要发出诊断的案例,但在 C++ 中不是必需的,因为它们是合法的 C++ 代码。这有点显而易见,因此我没有提供例子。