在阅读了大量的C ++文章和教程之后,我经常看到“C ++ C”这句话。或某些变体。如果这是真的,为什么C ++试图与C兼容?当然这只是鼓励C程序员编写糟糕的C ++代码?我只是这个领域的新手,所以我可以随意用我的错误来抨击我,因为我认为C ++应该只是考虑到它而忘记了C. Ell。
答案 0 :(得分:14)
与C兼容的目的是使C ++程序能够方便地访问世界上现有C代码的数十亿(数万亿?)行。从来没有打算将C ++编码为C语言。
外围目标是:
答案 1 :(得分:9)
您可以阅读the man himself here的历史视角。
C ++应该忘记C吗?从某种意义上说,这两种语言的发展是相互独立的。
答案 2 :(得分:2)
C ++起初是“C with classes”,它只是一个预编译器,它改变了class
&合。将语法糖转化为C代码(选择C是因为它非常普遍,C编译器可用于许多平台);这是它与C兼容的原因之一。另一个(也许更重要的)是与现有的C代码库(库,系统调用,...)保持兼容,这是其广泛使用的一个重要优势。
然而,在其演变和标准化过程中,C ++的发展变化很大。
其中包含的所有新功能(特别是高级OOP功能,异常,模板)及其标准库的演变(特别是其中包含STL)鼓励了新的编程风格,与旧版本有很大不同“C级”风格;许多常见的C语言已经过时,并且在C ++中有更好的替换(参见例如std::string
vs C风格的字符串,std::vector
vs“普通的”堆分配数组)。仍然,删除“较旧”的功能并不是一个好主意,因为(1)C兼容性在许多情况下仍然很重要,(2)“旧”的东西是C ++数据结构的基础({{1在内部使用原始指针和普通堆数组)和(3)C ++的背景哲学是让程序员选择。
因为一般来说“本机”C ++替代方案比通常更安全/更容易使用/更难以滥用,并且通常和相应的C语言一样快,所以通常会告诉C ++新手忘记C语言并直接从C ++开始,以避免选择“C坏习惯”。
特别是,当使用异常时,许多C习惯(=>例如原始指针)变得危险,所以新程序员从一开始就认为他的代码可以在任何地方被中断,并且制作更好从一开始就将其资源包装在RAII类中是不安全的。
答案 3 :(得分:1)
C ++曾经与C兼容(它甚至用C编译器编译,使用预处理器宏将其转换为C),但随后出现了更新版本的C,C ++得到了它自己的编译器,从那以后,然后语言变得不同了。不过,稍微小心一点,您可以使用C代码与C ++代码正确链接。