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搭 ...
随机推荐
- java:构造函数
class Dog { Dog(){ } } 构造函数没有返回值定义,构造函数名必须和类名相同,如果类里面没有构造函数,编译器会帮你加一个构造函数. 使用this调用构造函数 class Dog { ...
- Android 关于listView 显示不全的问题
刚刚在项目中发现一个bug,我是用ScrollView 嵌套 ListView的,但是我的数据只能显示一条,开始我还以为是数据有错误,经过排查以后发现是正确的 百度发现 android的架构好像没有考 ...
- YASKAWA电机控制(2)---调试
2015 5 23 基础调试—点动 上次接线由于没有接地,导致外壳带电,非常危险. 由于上次接线端子被弄坏,这次自己重做.由于没有压线钳,只用尖嘴钳把线压近端子,有可能会松动. 接线的时候Lc1.Lc ...
- 让Maven支持代理
1.如果你的公司架设了防火墙并设置了HTTP代理服务器来禁止你们直接连接互联网,那么Maven就无法通过代理自动下载依赖包. 为了让Maven能够工作,你需要在Maven的配置文件 settings. ...
- linux 开机自启动软件(包含xampp方法)
linux设置apache和mysql: linux开启启动的程序一般放在/etc/rc.d/init.d/里面,/etc/init.d/是其软连接. mysql设为linux服务 cp /usr/l ...
- 即时通信Spark安装和配置
spark:Cross-platform real-time collaboration client optimized for business and organizations.Spark i ...
- maven小项目注册服务(一)--email和persist模块
跟着书里的讲解,跟着做了一遍该项目: 首先明白注册账户的需求: 账号的lD和Email地址都可以用来唯一地标识某个用户,而显示名称则用来显示在页面下,方便浏览.注册的时候用户还需要输入两次密码,以确保 ...
- Android列表视图(List View)
Android列表视图(ListView) ListView是一个显示滚动项列表的示视图组(viewgroup),通过使用适配器(Adapter)把这些列表项自动插入到列表中.适配器比如从一个数组或是 ...
- 【HDOJ】1800 Flying to the Mars
1. 题目描述挺简单的一道题,给定$n$个大整数,求出现最多的次数. 2. 基本思路这题是可以使用哈希做,ELFHash等哈希都可以过. 3. 代码 /* 1800 */ #include <i ...
- add-two-numbers-ii
注意:有一种好的方法,是将链表倒转,然后依次相加. 但是,按照题目要求,用了不改变原链表的方法. 就是将两个链表增加到相同长度,然后递归相加,子函数返回后处理进位. https://leetcode. ...