** C# ** ** 和 ** ** C++ **
我刚把一个程序从 c# 转成 c++ 语言,因此对 c# 和 c++ 对比有一点基本体会。当然,书上说的太多的那种我就略过不提,而且很多底层的东西,是我们开发的时候所感受不到的。譬如 CLR 之类的。光从语法角度有些比较,一管之见。哈哈。
1. C# 在数组的使用上比 C++ 要容易得多,尤其是在下标不是常数,而是在程序运行中才确定的情况下,譬如一个二维数组,如果在 C++ 中,我们必须分两次申请空间如下:
int** p = NULL;
p = new int*[width];;
for (int i=0; i<width; i++)
p[i] = new int[height];
但是在 c# 里面,只需要 int[,] p = new int[width][height]; 一条语句就可以了。
2. 在文件读写上, c++ 还是功能强大许多。可能是因为 c# 没有指针的概念。因此 c# 的文件读写功能基本就是 readbyte (); readline() , 要么是一个一个 byte 来读,要么就是以字符串的形式读,然后你再解析这个字符串。二进制的读写 binaryreader and binarywriter 提供了 readint32(), readsingle() 等等,但是要求文件是二进制文件。因此,如果我们随手写了个文本文档,是一些以空格分开的数据,包括字符,浮点数等等,我们没有办法象原来 C++ 那样,
scantf(“%d %f…\n”, d, f);
这一点我当时用起来觉得非常不方便。 L
3. 函数重载, C# 比 C++ 方便。譬如我写一个交换两个变量的函数 swap (),如果是 C++ ,可能需要有 swap ( int , int ), sway ( float , float )等,或者使用模板。而 C# ,因为所有的数据类型都从 object 继承,所以,可以就用一个函数 swap ( object , object )就够了。当然,这样会有一些 box 和 unbox 的操作影响效率,但是对于写程序的我来说,我还是觉得方便多了。
4. 关于“ C# 变量使用前必须赋值”这一点,个人感觉有的时候会带来一些不便。譬如在条件语句里面给变量赋值,即便写程序的人能够确保自己的条件语句会成功,保证了某个变量肯定能赋值。但是 C# 会出错,一定要求你在条件语句外面显式赋值。
e.g Point p;
if (a==1)
p = new Point();
….
就算你能保证 a==1 是成立的, C# 也会要求把 p=new Point() 放到条件语句外面。当然,这个例子中没有什么非常不方便,我一时想不起来好的例子。 Sorry 。