如果我对c ++的理解是错误的,请纠正我

时间:2011-05-02 06:11:25

标签: c++ c

如果我目前对c ++的任何理解都是错误的话,请纠正我:

  1. C ++是C的扩展版本。因此,C ++与C一样有效。
  2. 此外,任何用C编写的应用程序都可以使用C ++编译器进行编译
  3. C语法也是有效的C ++语法
  4. C ++与C语言级别完全相同。
  5. 语言级层次结构

    例如。最低级别:汇编语言,     高级:Java,PHP等

    所以我的解释是

    C ++ / C的级别低于Java,PHP等,因为它更接近硬件级别(因此,它比Java,PHP等更高效),但它并不像汇编语言那样极端。 ...但是C ++ / C彼此处于同一水平,而且没有一个更接近硬件级别

9 个答案:

答案 0 :(得分:6)

  1. 如果你从兼容C和C ++的代码开始,它通常会用两者编译成相同的结果,或者足够接近,效率只会受到最小的影响。

  2. 可以编写不允许作为C ++的C(例如,使用名称与C ++中添加的关键字之一相同的变量,例如new)。然而,大多数此类情况都很容易转换,所以它们在C ++中是允许的。可能最难转换的情况是使用函数声明而不是原型的代码(或者使用没有声明的函数,这在旧版本的C中是允许的。)

  3. 参见2 - 某些语法C不能用作C ++。如上所述,转换通常是微不足道的。

  4. 不,不是真的。虽然C ++ 提供与C相同的低级操作,但它也具有C缺乏的更高级别的操作。

答案 1 :(得分:2)

1/4和2/3似乎在说非常相似的事情,但是:

  1. 是(取决于您对“扩展”的意思,但在广泛的层面上,是的)
  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)

  1. 这不完全正确,除了速度较慢的额外C ++语言功能外,还有不同的优化可以改变这一点。由于更好的C ++类型系统,这些实际上通常是C ++的优势。

  2. 不,一个很大的例子就是C ++不支持从void *自动转换,例如

    char * c = malloc(10); //是有效的C,但不是C ++

    char * c =(char *)malloc(10)//在C ++中是必需的

  3. 除了C99和更新的C功能外,我认为几乎总是这样。请记住,这只考虑语法这并不意味着可以用C语言编译的所有内容也可以用C ++编译。

  4. 您能否详细阐述一下您的意思,“语言层次结构”是什么意思?

答案 5 :(得分:1)

要点:

  1. 真。
  2. 危险的假。
  3. 假。
  4. 主观
  5. 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)

这是一个非常重要的问题。

  1. 并非在所有情况下!
  2. 由于3 ,
  3. 不正确
  4. 不正确
  5. 它们不完全相同
  6. 我认为语言级别的层次结构对于某件事情来说并不重要。例如,与汇编语言相比,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)

  1. C语言不是C ++语言的子集。例如,检查C99规范 - 它不会轻易地在C ++编译器中编译。但是,大多数C89源代码都可以复制并粘贴到C ++源代码中。 与裸机相比,C和C ++是可以实现“零开销”的语言。

  2. 没有。但是大多数C ++编译器也是C编译器。这意味着您可以使用相同的工具链编译.C和.C ++文件。

  3. 不,这些语言的演变有所不同。见第1个问题的答案。

  4. C ++是一种多范式语言。是的,它可以像C一样使用。但它也可以用作DSL - 它提供了更高的抽象级别。