2007年三月月 发布的文章

精灵发威,巴萨险平

相信在今天之前巴萨的球迷都很失落,因为巴萨在冠军杯八强战中被红魔利物浦淘汰了。但是看了今晨的'西班牙国家Derby',相信大家心情会略为好转起来,虽然巴萨依然没有赢球,让我们欣喜的是看到了一位潜在的巴萨未来王者的表演。

近期巴萨的境况不好,内部不团结等等因素让球队的战绩和上个赛季相比不能同日而语,昔日那个巴萨梦之队似乎渐渐从人们的眼线里消失了。今晨同样是从冠军杯被淘汰的两支西甲豪门相遇了,巴萨对皇马,在西班牙足球界,这丝毫不亚于火星撞地球^_^。巴萨境遇不好,皇马则更加落魄,上亿欧元打造的豪华军团,现在细数数皇马全队居然没有了领军人物,也就是劳尔资格老些,勉强撑得起门面,想当年齐达内、肥罗,菲戈、贝克汉姆等多位世界足球先生,欧洲足球先生坐镇的日子已经一去不复返了。皇马目前也仅剩下一个空架子罢了,用俗话说就是有些散。历史上特别是最近几年西班牙德比都甚是好看,每场都堪称经典,精彩进球也比比皆是,平均每场进球数是不少。这次估计也会延续这一势头的。

说实话我是没有看全所有比赛,但是几个进球还是在体育新闻中一个没拉下的全看到了。当梅西从右路推射远角入网扳平比分的时候人们也许只是认为这个小精灵状态很好;当梅西中路捡漏并打入一粒精彩的凌空抽射时,人们也许也只是为精灵的球技而鼓掌;当梅西从左路接小罗传球,利用个人技术快速突破多个后卫阻截并在后卫出脚拦截前将球从禁区左肋12码处打入时,人们开始惊叹今天的诺坎普王者诞生了,而这时时钟已经指向开场89分钟了。留着这位精灵的时间已经没有了。三次落后,三个从不同方向摄入的精彩进球扳平比分,相信所有人都会把自己打的最高分送给这个来自潘帕拉高原的精灵-梅西

没人会否认梅西会成为未来巴萨的新的领军人物,在巴萨目前这个动荡期,在有传闻说小罗即将出走的这个时候,人们会给梅西更多的期待和鼓励,加油吧,小伙子。

C++咬文嚼字-'0 or NULL'

C程序员和C++程序员在声明空指针时做法常常是不相同的。
C程序员常常如下做:
int *ptr = NULL;

C++程序员则是听从Bjarne Stroustrup或者其他C++大师的教诲,坚定地如下做:
int *ptr = 0;

也许没有谁对谁错之分,也许只是习惯不同罢了,毕竟C语言是老大哥,诞生的早;而在早期C编程时人们也许不习惯在程序里使用0这样的magic number,转而使用了#define NULL ((void*)0)来统一进行空指针的声明或者赋值。

在'Effective C++'中明确提出避免使用使用macro的issue,广大C++信徒自然也就将NULL抛掷脑后,并逐渐形成习惯,用0给指针赋值以意会这是个空指针的方式就流传了下来。

还是那句话没有谁对谁错,在'The C++ Programming Language Special Edition'中Bjarne Stroustrup在5.1.1小节用了不到200个words来说明了关于'0'或NULL的问题,这段叙述也是堪称经典,我们可以来回顾一下:

Zero(0) is an int. Because of standard conversions, 0 can be used as a constant of any integral, floating-point, pointer, or pointer-to-member type. The type of zero will be determined by context. Zero(0) will typically (but not necessarily) be represented by the bit patternall-zerosof the appropriate size.No object is allocated with the address 0 . Consequently, 0 acts as a pointer literal, indicating that a pointer doesn’t refer to an object.

0是一个整型数,通过标准的转型操作,0可以被用作各种数据类型常量,这些数据类型包括整型、浮点型、指针型或者指向类成员的指针类型。这时这个常量0的类型需要通过上下文才能判断出来。0通常(但不是必要的)用特定大小的全二进制0的bit串表示。没有object会被分配到0地址上,0只是字面值,其含义是这个指针变量没有指向(参考到)任何object。

举例:
int i = 0; //整型  
long l = 0; //整型  
float f = 0; //浮点型
double  d = 0; //浮点型

int *p = 0; //整型指针
double  *dp = 0; //浮点指针

class T {
 public :
                int func(int a){…};
};

T *pT = 0; //用户自定义类型指针
int (T::*PTR)(int) = 0; //指向类成员的指针类型

Bjarne Stroustrup继续说明了C与C++程序员习惯上的差异并给出了自己的建议:
In C, it has been popular to define a macro NULL to represent the zero pointer. Because of C++’s tighter type checking, the use of plain 0, rather than any suggested NULL macro, leads to fewer problems. If you feel you must define NULL, use const int NULL = 0;
The const qualifier prevents accidental redefinition  the NULL and ensures that NULL can be used where a constant is required.

在C中,定义一个macro NULL代表空指针是很流行常见的做法。由于C++编译器更严格的类型检查,使用0比使用NULL macro给你带来的麻烦更少。如果你一定要用NULL,那么建议作如下定义: const int NULL = 0; 这行定义会阻止意外的重定义NULL,而且会保证NULL在一个需要常量的场合被使用。

由此看来,在C++中0的灵活性和适应性更强一些,至于到底用哪个还是个见仁见智的问题,谁也不能强迫谁^_^。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats