C#和C++的主要区别

算是一篇学习笔记吧。记录一下学习中的感受,以便日后查询。

1 cs中的所有类都派生于同一个称作System.Objecet的基类。cpp没有这么一个基类,但vc中有一个祖先类CObject类,与cs不同的是,用户自定义的类可以不从它继承。

2 c#中定义一个实例时,如果是数值型,则在栈上创建;如果是引用型,则在堆上创建。cpp中,如果是 myclass m_object;则是在栈上创建;如果是myclass m_object=new myclass();则是在堆上创建。

                                                                                                                                 修改于2006年4月14日。

3 对于要到执行时才能获取的常量,cs中提供了只读属性的解决方案。这种属性只能在构造函数中初始化,初始化后再次不能修改。例如在变量声明中写:public readonly int myVaule;如果希望常量只读属性是静态的则按照如下声明:public static readonly int myValue;但这种静态公有属性要在一种叫静态构造函数的构造函数中声明(说的有些罗嗦:))静态构造函数的写法 static myClassname(){myValue=0;}。而在cpp中没有这些新东西。似乎c#是cpp的资料篇。呵呵!

                                                                                                                               

4 对于函数参数的定义有两种方案:一是值传递,这种传递不改变实参的值。函数首先把实参的数值拷贝到形参中,然后进行对形参进行操作。二是引用传递或是指针传递,这种方案不是把实参的值拷贝给形参,而是把实参的指针或引用拷贝给形参,于是对形参的操作就转为了对实参的操作。这种操作会改变实参的值。在下列3种情况下适合将函数参数定义为引用(注:这三条摘自与c++prime中文版第三版284页):一、必须改变成指针来允许改变实参的值时。二、向主函数返回而外的结果。三、向函数传递大对象。当运用第三条时,用户可能只是想传递大对象,但不希望改变实参的值,这时就要用到const型的引用。

C++中的写法

值传递 : void myfunc(int pa1,int pa2);

指针传递:void myfunc(int *pa1,int * pa2);

引用传递:void myfunc(int &pa1,int &pa2);

常引用传递:void myfunc(const int &pa1,const int &pa2);

C#中的写法:

使用ref引用传递: void myfunc(ref int a,ref int b);

使用out引用传递: void myfunc(out int a,out int b);

ref和out的区别:使用ref时在调用函数前必须把实参初始化,out不必。也就是说ref用于函数需要实参有值得情况。

                                                                                                                        

5 对于属性的读取。C++中一般把属性定义成私有,然后再定义公有的接口对这个私有成员进行操作。C#中把C++中的属性成为字段,然后又定义了一个概念叫属性。属性和字段通过C#提供的接口进行传递。用户对属性直接进行操作,然后调用上面说的接口函数传递给字段。好处就是更直观,给人的感觉似乎是直接操作C++中的私有成员变量,但其实是通过借口函数。

                                                                                                                                  修改于2006年4月17日。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/smstone/archive/2006/04/17/663055.aspx

### C#C++主要差异 #### 编程范式 C++ 是一种多范式的编程语言,支持过程化、面向对象以及泛型编程等多种风格。相比之下,C# 更专注于面向对象的编程方式[^1]。 #### 执行环境 C++ 应用程序通常编译为本地机器码,在目标平台上直接运行,因此具有更高的性能更低的资源消耗。然而,这也意味着开发者需要手动管理内存并处理平台特定的问题。相反,C# 运行于 .NET 平台之上,依赖 CLR(Common Language Runtime),这提供了垃圾回收机制其他高级特性,简化了开发流程但可能牺牲部分执行效率[^2]。 #### 内存管理 在 C++ 中,程序员需负责动态分配释放内存,容易引发诸如悬空指针等问题;而在 C# 中则采用了自动化的垃圾收集器来跟踪不再使用的对象并适时销毁它们,从而减少了因不当操作而导致错误的风险. #### 类库支持 两者都拥有丰富的标准模板/类库集合用于加速软件构建进程。不过,C#'s Base Class Library (BCL) 提供了一个更加统一且易于使用的接口集,涵盖了从基本数据结构到复杂网络通信等多个领域;而 STL(Standard Template Library),Boost 等则是 C++ 社区广泛采用的标准组件集合. #### 跨平台能力 尽管现代版本的 C++ 已经增强了其跨平台兼容性,但仍需借助第三方工具链才能实现真正的多操作系统移植.C#,特别是随着 Xamarin .NET Core 技术的发展,已经能够很好地支持 Windows,Linux 及 macOS 多种主流桌面级 OS ,甚至还可以用来编写 Android,iOS 移动端应用. ```csharp // Example of simple console application written in C# using System; namespace HelloWorldApp { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } } ``` ```cpp // Equivalent example implemented using C++ #include <iostream> int main() { std::cout << "Hello World!" << std::endl; return 0; } ``` #### 性能考量 由于缺乏 JIT(just-in-time compilation)优化阶段等原因造成的额外开销使得大多数情况下纯原生代码形式表现出来的 C++ 程序要比同等逻辑下的 C# 版本更快一点.但对于许多实际应用场景而言这种差距往往可以忽略不计或者被其他因素所掩盖掉比如易维护性快速迭代周期等方面带来的好处. 综上所述,C# C++ 各自具备独特优势适用于不同类型的项目需求.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值