设为首页 加入收藏

TOP

C++ 我想这样用(二)
2015-07-20 17:54:40 来源: 作者: 【 】 浏览:2
Tags:这样
没错,虽然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 ;
?
那么连上帝也帮不了你了= =!
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 3282 Ferry Loading IV(模拟.. 下一篇UVA - 825Walking on the Safe Si..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: