c++在设计之初希望提供先进的面向对象特性,同时提供很好的性能。但是
为了保证和以往的程序、开发人员的知识兼容,c++与 c 语言几乎完全兼容。c
语言本身其实就是现代计算机的高级抽象,可以直接访问地址、通过指针可以访
问几乎任何内存地址;堆和栈的结构体现等待。当然 c++也就具有了这样的特性。
随着 c++的逐步发展,generic programming 泛型编程技术和 stl标准模板库的
引入,c++和 c 的差异越来越大。基本上 c++是为了高效地使用面向对象技术或
者泛型技术编写大规模高性能应用程序(往往是一些相对比较底层的应用程序)
而设计的。
c#通过底层的虚拟机机制减少了 c/c++语言中常常容易发生的内存泄漏和
安全性问题,代价是运行速度减慢。同样的由于简化了编程语言的复杂性(c#
远远比 c++来得简单),大大提高了开发者得效率。另外 c#具有.net庞大的类
库,这个优势是 c++所不具有的。因此 c#非常合适开发企业中处理业务的应用程
序。同时微软所有的操作系统、服务器程序、桌面端程序都在向.net平台统一。
在历史上与次类似的情形(指微软技术)只有在微软从 16位平台向 32位平台转
变的过程中发生过。因此现在.net的转变对开发者来说可能是痛苦的(因为要
学习很多新的东西),但也充满了机会。
(1)编译目标:C++代码经常编译成汇编语言。而 C#则编译成中间语言(IL)
它与 Java的字节代码有些相似。IL随后在通过 Iust-In-Time编译进程转换成
本机的可执行代码。IL代码将作为一个装配件存储在一个或多个文件中,一个
装配件就形成一个单元,IL代码就是在该单元中被打包的,对应于 C++编译器创
建的一个 DLL或可执行文件。
(2)内存管理:C#将开发人员从记账式的内存管理任务中解放出来,不再
需要显式地删除动态分配的给堆的内存,而 C++则要这么做,无用存储单元收集
器将周期性地清空不再使用的内存,为了使这一功能简便的执行,C#限制了存储
在堆栈中变量的使用。对于数据类型的安全性,C#的要求比 C++更严格。
(3)指针:C#中指针的运用可能与 C++一样,但它只用于已特别标记为应
用指针的代码块中。对于大部分的程序,C#依赖 VB/Java风格的对类实例的引用,
而不需和 C++一样频繁地使用指针。
(4)运算符重载:C#中可用来显式重载的运算符比 C++要少,很大程度上
是因为,C#编译器是运用一些定制的基本操作符重载(如=)来自动计算出组合
操作符的重载(如+=)。
(5)库:C++和 C#都依赖于扩展库的出现,ANSI C++依赖于标准库,C#
依赖于.NET基类。而.NET基类是以单一的继承为基础,而标准库是以继承和模
板为基础。ANSI C++的库和语言本身是分离的,C#中则是互相依靠的,关系更
为紧密。并且很多 C#关键字的执行都依赖于特定的基类,
(6)目标环境:C#是基于 GUI的环境下(不仅仅是 Windows环境,尽管现
在只是在 Windows中可用)专门为编程和背景服务(如 Web服务)而设计的。这
与语言本身无关,而是反映在基类库的设计中。相比较,C++是在命令行用户界
面时期被开发的,C#和标准库都不支持 GUI元素。在 Windows中,C++必须直接
或间接地依靠 Windows API来实现这一支持。