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

C++ VS C#(4):枚举,结构体

//=====================================================================
//TITLE:
// C++ VS C#(4):枚举,结构体
//AUTHOR:
// norains
//DATE:
// Tuesday 7-December-2010
//Environment:
// Visual Studio 2010
// Visual Studio 2005
//=====================================================================

1.枚举

无论是C++还是C#都采用enum来声明一个枚举类型,比如:enum Format { RGB888, RGB565, };

但在使用上,却大相径庭。对于C++来说,可以直接使用定义的类型,而C#则必须增加一个.标示,如://C++ Format format = RGB888; //C# Format format = Format.RGB888;

这样看来,C#似乎繁琐一点,还要相应的类型定义;但这样却带来另外一个好处,就是同一命名空间里面的不同的enum类型可以有相同的数值,如:enum Format { RGB888, RGB565, }; enum Format2 { RGB888, RGB565, }

这段代码在C#中能够顺利编译,在C++中会提示如下错误:error C2365: 'RGB888' : redefinition; previous definition was 'enumerator};

C++中的enum本质只是一组数值的集合,名称也仅仅是数值的标识,但对于C#而言,却又向前跨进了一步,enum还可以获得相应的名称字符串,如:string strFormat = Format.RGB888.ToString();

不仅可以使用成员函数,还可以使用全局的Convert函数,如:string strFormat = Convert.ToString(Format.RGB888);

更为有意思的是,除了数值类型,string也能转换为enum类型,如:Format format = (Format)Enum.Parse(typeof(Format), "RGB888");

不过需要注意,这里的字符串也是大小写敏感,如果该转换的字符串不在enum类型的名称之列,则会出错。


2.结构体

在C++中,类和结构体是一致的,唯一的区别在于,类默认的访问域是private,而类是public。但对于C#来说,结构体的成员默认访问域为private,如果要指定public,则必须每个成员变量都指定,如:struct Size { public int x; public int y; };

可能熟悉C++的朋友会觉得这样写有点麻烦,C#里面能不能也像C++这样:struct Size { public: int x; int y; };

但很可惜,这种写法是在C#中是不成立的。简单点来记忆,C#关于结构体的语法,都可以完整移植到C++中,反之则不成立。

相关文章:

  • 字节对齐问题 --- 莫名其妙的crash
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • 物联网系统设计初稿
  • Python xlsx 读取
  • S3C2440-启动分析
  • 2.3 js基础--DOM
  • [译]新的web应用:播下web3.0的种子
  • NSSearchPathForDirectoriesInDomains
  • ArcGIS 切片缓存紧凑文件格式分析与使用
  • CS224d Problem set 2作业
  • 一个日志输出系统的设计
  • linux内核内存管理中的pagevec结构体
  • poj_2352 线段树
  • Mac周边环境 goBASIC语言HelloWorld
  • linux内存管理系统后期的内核对zonelist的简化
  • 【Leetcode】101. 对称二叉树
  • 【React系列】如何构建React应用程序
  • Angular4 模板式表单用法以及验证
  • docker-consul
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • java多线程
  • npx命令介绍
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • 机器学习中为什么要做归一化normalization
  • 前端相关框架总和
  • 一些css基础学习笔记
  • 移动端唤起键盘时取消position:fixed定位
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • ​VRRP 虚拟路由冗余协议(华为)
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #android不同版本废弃api,新api。
  • #pragma预处理命令
  • #图像处理
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (3)STL算法之搜索
  • (WSI分类)WSI分类文献小综述 2024
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (十六)一篇文章学会Java的常用API
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)ORM
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET连接数据库方式
  • .NET项目中存在多个web.config文件时的加载顺序
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @Query中countQuery的介绍
  • @Resource和@Autowired的区别
  • @RestController注解的使用
  • [ C++ ] STL---string类的模拟实现
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [20150707]外部表与rowid.txt
  • [2016.7 day.5] T2
  • [AX]AX2012 R2 出差申请和支出报告