C++ VS C#(2):字符串,命名空间

//=====================================================================
//TITLE:
// C++ VS C#(2):字符串,命名空间
//AUTHOR:
// norains
//DATE:
// Tuesday 30-November-2010
//Environment:
// Visual Studio 2010
// Visual Studio 2005
//=====================================================================

1.字符串

无论是C++还是C#,都支持字符串,都可以用string来进行保存。不过,string在C#中是内置类型,但在C++里却必须要借助于STL。还有一点很有意思的是,string在C#中存储的是UNICODE,但在C++却是ANSIC。如果要让C++支持UNICODE的字符串,则必须使用wstring。

这两种语言,对于字符串都可以这样操作:string strVal = “Hello,”; strVal += “World!”;

如果字符串带有换行或别的转意字符,都可以使用“\”来表示,如: strVal = “Hello,World!\nI like it!”; strVal = “He said:\”It’s you!\””;

但C#有个增强的特性,可以在第一个引号前加“@”,表示在“@”之后,“;”之前的引号的内容原封不动作为数值。简单点说,上面的两个语句,用C#还可以以这种形式表示: strVal =@ “Hello,World! I like it!”; strVal = @“He said:”It’s you!””;


2.命名空间

C++和C#都支持命名空间,也就是namespace,并且都支持嵌套,如:namespace Root { namespace Leaf { enum Type { TYPE_NORMAL, TYPE_HIGH, }; } }

虽然声明一致,但使用上却大相径庭。对于C++来说,命名空间的必须使用“::”来进行标注,如: Root::Leaf::Type type = Root::Leaf::TYPE_NORMAL;

但C#却是采用“.”:Root.Leaf.Type type = Root.Leaf.Type.TYPE_NORMAL;

如果以操作的观点来看,本例中的Type在C++中更像是类的类型,而C#则是对象的类型。

还有一个很有意思的区别,C#不能直接在命名空间中直接声明变量或函数,如:
namespace Root { namespace Leaf { int iVal = 0; void Run(){}; } }

这个代码段在C++能够很完美地进行编译,但在C#中却会提示出错:error CS0116: A namespace cannot directly contain members such as fields or methods

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值