我在教程中读到C ++包含整个C编程语言。
但是我也在like this那个地方读过
如果您学习C ++,您最终将学习大部分C语言,并且随着时间的推移,您将学习一些语言之间的差异。
所以我的问题只有这个:
如果我非常了解C ++,我最终会学习"真正的" C语言(没有任何"差异")因为C ++ 11中包含完整的C90语言?
答案 0 :(得分:16)
不,C ++不是C语言的超集。虽然C ++包含C的很大一部分,但是有一些细微的差别会让你在最不期望的地方咬人。以下是一些例子:
void
指针时进行显式转换。const
传播有不同的规则。int
规则”的东西,虽然已经废除了C99,但有时会出现,需要加以考虑。a ? b : c = d
是C中的语法错误,但在C ++中解析为a ? b : (c = d)
。&*E
与E
完全相同,即使E
是空指针也是如此。 C ++没有这样的保证。\0
字节的字符串一样长。 (即char foo[3] = "bar"
是合法的)。在C ++中,数组必须至少与包含尾随\0
字节的字符串一样长。'A'
等字符文字的类型为int
。在C ++中,它具有类型char
。C有一项特殊规则,即通过工会进行打字是合法的。 C ++缺少这种语言,使得代码如
union intfloat {
int i;
float f;
} fi;
fi.f = 1.0;
printf("%d\n", fi.i);
未定义的行为。
答案 1 :(得分:4)
如果我非常了解C ++,我最终会学习“真正的”C语言(没有任何“差异”)
如果你正确地学习C ++,你可能不需要使用C中使用的许多标准技术。从理论上讲,你可以用C ++中的几乎任何C编程,但已经引入了例外。但是,实际上,你不会 - 或不应该。这是因为C ++是一种不同的语言,在最佳使用时提供了一组非常不同的工具。
除了 very 这些基本元素(如一般语法和基本类型)之外,这些是两种不同的语言,它们应该被接近(学习,编程)。
答案 2 :(得分:4)
从广义上讲,C ++语言基本上是C语言,并添加了大量面向对象的东西。几乎所有用C编写的代码都可以在C ++中编译和运行。
但是,语言中有一些角落存在差异。随着时间的推移,这些语言的数量一直在缓慢增长,但语言的变化不足以使其成为一个重大问题。
如果你只学习C ++,那么是的,你最终也会学习C语言的几乎所有方面。如果您成为C ++的专家,那么您将能够识别和理解C和C ++的相似部分之间存在细微差别的地方。
答案 3 :(得分:2)
我不确定"差异"可能存在......
在C:中 void foo()表示"函数foo采用未指定数量的未指定类型的参数"
[...]
在C ++中:
void foo()表示"函数foo不带参数"
答案 4 :(得分:-1)
如果您首先学习C ++,您将能够非常轻松地学习整个C库。一些语法与其他一些较小的差异略有不同。就像KerrekSB所说的那样,一个例子就是Type punning规则和void的隐式赋值。还有更多,但最终你将能够学习这些。它基本上就像学习英语俚语。