当前位置: 首页 > news >正文

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

相关文章:

  • URAL 2032 - Conspiracy Theory and Rebranding【本源勾股数组】
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之89——BREW中的测试工具...
  • uva 571 素数的性质
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之90——BREW中的调试信息...
  • C++中static用法
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之90——BREW中的日志接口功能...
  • cmd 控制台 提示:请求的操作须要提升!
  • eclipse-ADT安装失败经验
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之91——BREW手机中的调试模式...
  • 团队冲刺-2
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之91——BREW debuger的使用...
  • [整理]Svn常见问题汇总。
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之92——BREW中的Perl 接口使用...
  • 修改Eclipse/MyEclipse项目的默认编码(转)
  • 微软等数据结构+算法面试100题,为什么会这样火?
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • css系列之关于字体的事
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Spring Boot MyBatis配置多种数据库
  • Twitter赢在开放,三年创造奇迹
  • TypeScript实现数据结构(一)栈,队列,链表
  • uni-app项目数字滚动
  • 记录一下第一次使用npm
  • 每天10道Java面试题,跟我走,offer有!
  • 如何用vue打造一个移动端音乐播放器
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 树莓派 - 使用须知
  • 一些关于Rust在2019年的思考
  • 责任链模式的两种实现
  • 自制字幕遮挡器
  • 做一名精致的JavaScripter 01:JavaScript简介
  • # 透过事物看本质的能力怎么培养?
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (175)FPGA门控时钟技术
  • (4)Elastix图像配准:3D图像
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (阿里云万网)-域名注册购买实名流程
  • (搬运以学习)flask 上下文的实现
  • (二)丶RabbitMQ的六大核心
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (新)网络工程师考点串讲与真题详解
  • (一)VirtualBox安装增强功能
  • (转)母版页和相对路径
  • .htaccess 强制https 单独排除某个目录
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net FrameWork简介,数组,枚举
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET6 命令行启动及发布单个Exe文件
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET开源项目介绍及资源推荐:数据持久层
  • /3GB和/USERVA开关