如果我目前对c ++的任何理解都是错误的话,请纠正我:
例如。最低级别:汇编语言, 高级:Java,PHP等
所以我的解释是
C ++ / C的级别低于Java,PHP等,因为它更接近硬件级别(因此,它比Java,PHP等更高效),但它并不像汇编语言那样极端。 ...但是C ++ / C彼此处于同一水平,而且没有一个更接近硬件级别
答案 0 :(得分:6)
如果你从兼容C和C ++的代码开始,它通常会用两者编译成相同的结果,或者足够接近,效率只会受到最小的影响。
可以编写不允许作为C ++的C(例如,使用名称与C ++中添加的关键字之一相同的变量,例如new
)。然而,大多数此类情况都很容易转换,所以它们在C ++中是允许的。可能最难转换的情况是使用函数声明而不是原型的代码(或者使用没有声明的函数,这在旧版本的C中是允许的。)
参见2 - 某些语法C不能用作C ++。如上所述,转换通常是微不足道的。
不,不是真的。虽然C ++ 提供与C相同的低级操作,但它也具有C缺乏的更高级别的操作。
答案 1 :(得分:2)
1/4和2/3似乎在说非常相似的事情,但是:
答案 2 :(得分:2)
此外,任何用C语言编写的应用程序 可以使用C ++编译器编译
并非每个C程序都可以使用C ++编译器进行编译。 C和C ++(例如关键字)之间存在一些差异,这些差异阻止了C和C ++在某些方面的混合。 Stroustrup在C and C++: Siblings中阐述了一些重点。
C ++是C的扩展版本。 因此,C ++同样有效 下进行。
这取决于您使用的语言功能。我听说使用OOP可能会比使用更像C的方法带来更多的缓存未命中。我不知道这是不是真的,因为我没有阅读更多有关该主题的内容。但它可能是应该考虑的事情。这只是一个例子,表现不容易比较。
答案 3 :(得分:2)
答案 4 :(得分:1)
这不完全正确,除了速度较慢的额外C ++语言功能外,还有不同的优化可以改变这一点。由于更好的C ++类型系统,这些实际上通常是C ++的优势。
不,一个很大的例子就是C ++不支持从void *自动转换,例如
char * c = malloc(10); //是有效的C,但不是C ++
char * c =(char *)malloc(10)//在C ++中是必需的
除了C99和更新的C功能外,我认为几乎总是这样。请记住,这只考虑语法这并不意味着可以用C语言编译的所有内容也可以用C ++编译。
您能否详细阐述一下您的意思,“语言层次结构”是什么意思?
答案 5 :(得分:1)
要点:
2/3的一些例子:
sizeof 'a'
在C ++中为1,在C中为sizeof(int)
。char *s = malloc(len+1);
是正确的C但是C ++无效。char s[2*strlen(name)+1];
有效(尽管很危险)C,但无效的C ++。sizeof (1?"hello":"goodbye") is
sizeof(char *)`在C中但在C ++中为6。尝试编译现有的C代码作为C ++是完全无效的,即使你追捕并“修复”所有编译时错误,也可能产生危险的错误。编写在两种语言中都有效的代码可能是多语言竞赛的合理条目,但不是任何严肃的用途。 C和C ++ 的交集实际上是一种非常难看的语言,这是两个世界中最糟糕的。
答案 6 :(得分:0)
这是一个非常重要的问题。
我认为语言级别的层次结构对于某件事情来说并不重要。例如,与汇编语言相比,C是高级语言,而与Java / C#相比,它是低级语言。
答案 7 :(得分:0)
你的一些观点是错误的理解:
1)你的第一点是对的.C ++是c的扩展。
2)第二点是对的。 C可以使用c ++编译器编译。
3)一些C语法与c ++不同。在c ++中,使用结构,c应该指定结构名称,但是c ++不是必须指定结构名称。而且C ++具有c中没有的类的概念。 C ++也有更高的安全机制。
4)C是过程语言,但c ++是面向对象的方法。所以c ++与c。
的语言级别不完全相同答案 8 :(得分:0)
C语言不是C ++语言的子集。例如,检查C99规范 - 它不会轻易地在C ++编译器中编译。但是,大多数C89源代码都可以复制并粘贴到C ++源代码中。 与裸机相比,C和C ++是可以实现“零开销”的语言。
没有。但是大多数C ++编译器也是C编译器。这意味着您可以使用相同的工具链编译.C和.C ++文件。
不,这些语言的演变有所不同。见第1个问题的答案。
C ++是一种多范式语言。是的,它可以像C一样使用。但它也可以用作DSL - 它提供了更高的抽象级别。