有什么我可以在C中做,但我不能用C++做?我在样本面试问题网站上偶然发现了这个问题......
声明一个名为'class'的变量,如:
int class = 0;
...这是我可以用C做的,但不能用C++做.
这两种语言都是图灵完备的,因此从理论上讲,您可以在两者中编写同等功能的应用程序.
OTOH,C++不是C的超集.特别是C99具有C++没有的一些功能.例如指定的初始值设定项,结构中的可变长度数组和自动变量.根据你的"任何东西",这可能是C++不能做但C可以做的事情.
在C中,您可以创建数组文字("复合文字"),但在C++中则不能
/* p points to the first element of an array of 4 int */ int *p = (int[]){1, 2, 3, 4};
您还可以创建一个在编译时尚未知的大小的数组,但C++没有这种可能性("可变长度数组"):
// create array. size is known at runtime only. int p[rand() % 5 + 1];
int new = 0;
在C中工作,但显然无法在C++中工作,因为"new"是一个保留字.
还有其他一些带有保留字的"技巧",但除此之外,你几乎可以用C语言做C中的所有事情.
C++缺少C99的restrict
限定符.因此,没有办法告诉编译器基于知道指针不是别名来执行优化.
你可以在C语言中说一些你不能用C++编写的东西(因为C++有更严格的语法检查,而C有更广泛的'遗留'语法).
此外,可能有一些运行时环境(O/S +库+编译器),它支持C而不是C++,这样你就可以做在这些平台上,你不能做C++℃.
相当多的事情.例如,在C中,您可以编写如下代码:
void * v = 0; char * p = v;
你可以创建这样的数组:
int main() { int n = 42; int a[n]; return 0; }
它们都不会在C++下编译.
从语法上讲,你可以在C中编写一些不能用C++编译的东西(参见ISO C和ISO C++之间的不兼容性,以获得难以理解的细节).如果你要求更高级别,如果有一些程序可以用C语言编写,但不能用C++编写,那么答案就是"不".