C++ 我想这样用(二)
话接上篇,从纯C环境转C++环境需要注意些什么呢?
没错,虽然C++曾号称兼容C,而且很多人甚至觉得C就是C++子集,但是c脑残粉一定知道,两者有很大的不同!
下面这些要点是比较突出的,后期我再补充其他的:
1.关于类型转换
C是弱类型的,至少比C++弱,在C下面很多类型转换我们不怎么管,编译器也会默认,最多有些讨厌的编译器(如某软家的)会给出警告,但是在C++下面就不一样了,这些都是error!!你不显示声明,就别想跨类型!!其实这也是好事,多打几个字母,反而代码清晰了严谨了:)
Example
在C里,你这样写:
  
          int* p;
          p = malloc(10 * sizeof(int));
在C++里,你必须这样写:    
  
          int* p;
          p = (int *)malloc(10 * sizeof(int));
2.关于字符数组
在C里,你可以声明一个字符数组,长度正好是串长,即:没有地方放‘\0’,但在C++里,你不能这样做:
char s[3] = "abc";(在C里正确,在C++里错误)。
我的建议是:如果你是个正常的人类,就是在C里面你也会写成:
char s[4] = "abc";
不过其实最好的写法是:char s[] = "abc"; 不是吗??
3.关于嵌套的类型定义
Example
struct S {
              int a;
              struct T {
                  int t;
              } b;
              int c;
              enum E { V1, V2 } e;
          };
struct T x;
          enum E y;
上述代码在C里面没问题,这是因为S、T、E三者的作用域(Scope)相同,但是在C++里,确实是错误的!在C++里,T和E的作用域是在S里的,想在外面使用只能S::T,这涉及到命名空间的问题,我们以后再说。
不过就算在C里,我也会把E和T单独拿出来定义,这种嵌套的写法,总有鸠占鹊巢的感觉~~
4.关于枚举类型
我们都知道,在C里面枚举和整型是一样的,枚举就是整型,于是我们这样干:
enum RGB { red, green, blue } rgb;
          ++rgb;
哦,看吧,世界多美好。然而C++的世界是残酷的,枚举是独立的类型,且不支持++这类整数操作符。于是你说没关系:"rgb=rgb+1;"就好了。很可惜。又错了。。。是的,因为没有显示的进行类型转换,于是正确的写法:
enum RGB { red, green, blue } rgb;
rgb = RGB(rgb + 1);
虽然有的长,不过还好啦,如果你的强迫症已经达到神级了,那么也有办法,给RGB加上++运算符的重载吧,具体内容以后说。
5.关于注释
//和/**/的双注释方案早就被C采用了,所以其实没啥特别要注意的,不过你非要这样写的话:
i = j //* comment */ k ;
那么连上帝也帮不了你了= =!
这次就写这么多了,下次继续补充~~
C++ 我想这样用(二)的更多相关文章
- bzoj1047-理想的正方形(二维单调队列)
		题意: 给一个矩阵,给出行列和每个数,再给出一个N,求出所有N*N的子矩阵中最大值最小值之差的最小值解析: 暴力枚举肯定不行,这题可以用二维单调队列做,把同一行的连续N个点缩成一个点保存最大最小值预处 ... 
- 后端程序员看前端想死(二)进入页面之后js分析
		在上一篇中分析了一下以网页的组成.header中引入的乱七八糟的东西,现在进入到js中进行分析了 tuhooo啊,你是要搞前端了么? nonono,好玩,学一下 打开页面之后执行js的几种方法 直接写 ... 
- Android开发之扫描二维码开发
		原贴地址:http://www.cnblogs.com/Fndroid/p/5540688.html 二维码其实有很多种,但是我们常见的微信使用的是一种叫做QRCode的二维码,像下面这样的,可以放心 ... 
- Android开发学习之路-二维码学习
		这个月装逼有点少了,为什么呢,因为去考软件射鸡师了,快到儿童节了,赶紧写篇博纪念一下逝去的青春,唔,请忽略这句话. 二维码其实有很多种,但是我们常见的微信使用的是一种叫做QRCode的二维码,像下面这 ... 
- iOS 读取相册二维码,兼容ios7(使用CIDetector  和   ZXingObjC)
		ios从相册读取二维码,在ios8以上,苹果提供了自带的识别图片二维码的功能,这种方式效率最好,也是最推荐的,但是如果你的系统需要向下兼容ios7,就必须用其他方式. 这里我选择的是 ZXingObj ... 
- 个性二维码开源专题<介绍篇>
		由C#编写的个性二维码底层,已应用到 码晒客/疯狂创意二维码等项目上,并获得多项软件著作专利. 疯狂创意二维码 疯狂创意二维码是可用于生成风格独特的个性化二维码生成器,用户可以将目标信息输入到二维码生 ... 
- IOS 二维码生成
		这篇博客将会介绍二维码的生成. 由于没有什么东西值得长篇大论的,所以这里我就通过代码的实现介绍二维码. 第一部分 第一部分是二维码的简单生成没有其他重点介绍. 效果图 代码部分 // // ViewC ... 
- ZXing二维码的生成和解析
		Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法, 现在我简单介绍一下使用Java利用Zxing生成与解析二维码 注意: 二维码的生成需要借助辅助类( ... 
- sqlite:多线程操作数据库“database is locked”解决方法(二)
		上一篇博客<sqlite:多线程操作数据库“database is locked”解决方法>通过注册延时函数的方法来处理数据库被锁的问题.此方法固然能解决问题,但是在多个线程向数据库写入大 ... 
- EcShop二次开发系列教程–总纲
		EcShop作为老牌的B2C独立网店系统,功能非常全名,强大的文件.数据库缓存机制,保证前后台系统执行速度更快.系统平稳运行.但是过多的功能也或多或少的会影响到系统的整个效率,所有在使用EcShop搭 ... 
随机推荐
- 机器学习 —— 概率图模型(Homework: Representation)
			前两周的作业主要是关于Factor以及有向图的构造,但是概率图模型中还有一种更强大的武器——双向图(无向图.Markov Network).与有向图不同,双向图可以描述两个var之间相互作用以及联系. ... 
- Linux Shell脚本读写XML文件
			在Linux下如何用Shell脚本读写XML?现有一个config.xml <?xml version="1.0" encoding="UTF-8"?&g ... 
- 使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录
			Linux kernel 的官方 GIT地址是: http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git 可以从这个地 ... 
- iosUITextField属性
			@property UITextField *caption; caption = [[UITextField alloc] initWithFrame:CGRectMake(, self.frame ... 
- poj3468,poj2528
			其实这两题都是基础的线段树,但对于我这个线段树的初学者来说,总结一下还是很有用的: poj3468显然是线段树区间求和,区间更改的问题,而poj2528是对区间染色,问有多少种颜色的问题: 线段树的建 ... 
- Jqgrid入门-Jqgrid设置二级表头(六)
			上一章已经说明了Jqgrid结合Struts2+json展示数据,这一章主要探讨Jqgrid如何设置二级表头,类似这样的效果.如: 要实现这个功能,其实也不难.通过Jqgrid的s ... 
- NoSQL 数据库系统对比
			虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举. 但是NoSQL数据库之间的不同,远超过两 SQ ... 
- 物联网操作系统HelloX V1.78测试版正式发布
			经过HelloX开发团队近四个月的努力,在HelloX V1.77版本基础上,增加许多功能特性,并对V1.77版本的一些特性进行了进一步优化之后,正式形成HelloX V1.78测试版本,经相对充分的 ... 
- fmri降噪,利用spatial+temporal信息
			1.基于小波+高斯模型 <SPATIOTEMPORAL DENOISING AND CLUSTERING OF FMRI DATA> 
- TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节
			1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由.这里就不重复了.首先来看看一个简单的系统 ... 
