7、80年代我们都在玩什么

偶然间在新浪看到这么一个调查-'7、80年代我们都在玩什么',这里我也借用这个题目主要谈谈小时候我这个80后的都玩过哪些。

在这篇调查的篇首有这么一段话:'七、八十年代的中国,没有电脑,没有网络游戏,没有PSP,没有萝莉,也没有机会看美国大片。对于现在25~35岁这个年龄段的人来说,下面的32种“游戏”便成了他们休闲娱乐的首选!无论你是或者不是这个年龄段的,都来看看,了解下,这些或许已经绝迹的儿时回忆。' 的确,在那个几乎'一无所有'的年代里我们这些人收获的却是快乐,而今天的小孩子们他们的快乐方式和我们那时已经大不相同,用'绝迹的儿时回忆'来形容还是很恰如其分的。

纸飞机
记得那时后倪萍姐姐主持的七巧板节目大家都喜欢看,一把剪刀一张彩纸,翻翻折折,一件纸手工品就诞生了。在这些手工品里面纸飞机是最简单不过的了,材料不苛求,随意一张什么纸都可以。一般家庭父母都会教小孩子如何折一个纸飞机,有些小孩子可能会折多种纸飞机,我起码就会两三种。飞机虽然是纸的,但是也要飞上蓝天。拿着自己的纸飞机无论在什么场合都用力一掷,白色的纸飞机展开翅膀翱翔的天空中;孩子们都会比谁制作的纸飞机飞的又高又远,有些小孩子还特意跑到高处去放飞自己的飞机,的确有些人制作的飞机飞的真是惊人的远。

弹玻璃球
真是不知道这个游戏究竟起源于什么年代,但是在我小时候那可真是一项比较火爆的游戏。每天上学兜里都揣上各种型号的五颜六色的玻璃球,一到课间休息就会疯狂的跑出去,把最大型号的球放到土地上,用脚用力一踩,在地上出现一个洞,被打入这个洞的球就输给了击打者。所有参加游戏者都是将自己手中的球弹出去击打另一方的球,以使另一方的球入洞。玻璃球也分大小,玩的时候不限大小,当然大球自然由于'身体优势'在游戏过程中是占尽便宜。不过大球卖的贵,不易购到。记得当我上初中的时候,我家里还有一大罐各种类型的玻璃球。

弹弓
小时候拿弹弓打碎人家窗玻璃或打坏什么东西的事情总是屡屡发生,隐约记得第一副弹弓是爸爸用钢丝给我做成的柄,用橡皮筋做的弓弦,威力着实不小。那时候的弹弓基本上都是自己做的。不知道现在有没有卖现成的。

拍画
我们东北这边不叫'拍画',叫的名字我用汉字还真写不出来,大致发音是'shan pia(汉语里没这个发音,我造出来的) ji'。那时候那种'拍画'在各个小卖店都能买到,一角钱一张,纸盒做的,上面粘了一张印有各个图案的纸,每个图案都是圆形的,回家后用剪刀沿着图形边缘将之剪下来。图案是多种多样的,有变形金刚的,有评书里面的人物,像什么三侠五义,杨家将等等。'拍画'也大小不一,我见过最大的直径约12厘米。'拍画'的玩法也很简单,就是把你手中的'拍画'拍到地上,如果能把对方放在地上的拍画掀翻,则你赢,对方的那张拍画就归你了;如果你没能掀翻对方的拍画,则你的拍画落在什么位置是不能动的,轮到对方拍你了;如果你的拍画落到石头上或地面凸起上,那你就不走运了,对方就会很容易将你的拍画掀翻。玩这个游戏有一定危险就是拍的时候过于用力,手指常常碰到地面,常常破皮流血。

丢沙包
一个群体活动,课间或者放学后小孩子们经常玩的游戏,各地可能规则不同。我们那的规则是两边是两个人丢沙包(我们这也管叫口袋,里面经常装的不是沙子,而黄豆粒或者其他谷物粒),中间一堆人,口袋打到谁,谁就退出。如果中间的人接住了口袋,就可以将已经被打掉的人复活。这个游戏集娱乐和运动于一身,大家都喜欢玩。

吹泡泡
吹泡泡印象不深,印象中小女孩儿都喜欢,吹完泡泡,很多小孩子还在泡泡的世界里又蹦又跳的。

跳马
记得从小学一年级就开始玩的游戏,到了初中,大家都涨高了,跳马的难度也增加了很多。玩到顶级高度,基本上就是一个人在那直挺挺的站着,如果想从上面跨过基本上两个人都会人仰马翻,这时候就有一定的危险了。

气门芯滋水枪
在高级水枪没出现之前,自己制作气门芯滋水枪是唯一的战斗武器了。记得那时还有'水气球弹',将一个小气球灌满水,扎上口就是一个小型水炸弹,打在谁身上都保准让谁成为落汤鸡。

玩泥巴
记得小时候住在平房,家家都有黄土,用来封火炉的;每次下雨后,黄土堆都成为小孩子们的乐园,因为有泥巴。用黄土制作各种造型的玩具,小坦克,小汽车,小手枪等等,除了这些摔泥巴是孩子们的最爱,一团泥巴,整理成长方体形,然后在中间小心的挖一个洞,然后洞口朝下摔倒地上,就为了听那一声'啪'。

捉虫子
可怜那些蜻蜓、蝴蝶、蚂蚱了,没到春夏秋之际,他们就成为了小孩子们的玩物,有些动物被残忍的'迫害'了。

抽陀螺
在北方,陀螺很受欢迎,特别是在冬季,在冰上,路上到处可见抽陀螺的小孩子,陀螺是买的,鞭子一般都是自己做的,最简单的原料就是鞋带。没雪没冰的时候,光溜溜的马路就成为抽陀螺的好地方。

老鹰抓小鸡
这个游戏估计也是为数不多的流传下来,在现在也仍在玩的。这个游戏老少皆宜,从幼儿园玩到花甲古来希。

跳房子
我们这叫'跳格',用石头或者粉笔等在地上画方格,然后按照规则跳,每次跳都是有任务的,将口袋放到指定格里。女生们的最爱,男生也喜欢跟着凑热闹。

跳皮筋
我们这个年代出生的女孩好像没有不会的吧,是这个年代最最普及的女生运动了,跳法众多,不一一列举(我也不知道^_^)。有些男生也参与,甚至跳的比女生还厉害。

集烟纸
这个游戏发生在一个时间段,之后就渐渐消失了。我记得是用烟纸折成三角形(打些卷)然后并排放在桌子上,然后用手掌拍桌子,用掌风将烟纸掀翻,你就算赢,这个烟纸就归你了。不同品牌的烟纸价值也不一样。

塑料小人
塑料小人,我们这边叫霹雳人,手脚都可以活动,还有各种武器如枪,剑,盾牌;更小的小人手脚都是不能动的,一般是卖一组,比如一个美国特种兵班,还有一些车辆和大炮。

变形金刚
变形金刚在中国的风靡程度估计还没有哪部动画片可以比拟,直到现在仍有很多成年人喜欢收集变形金刚玩具,孩子宝公司的变形金刚玩具真是吸引人的眼球。记得小时候,几乎每个小男生上学时书包里都放一个自己心爱的变形金刚玩具,课间大家一起拿出来,比划一番。至于变形金刚的书籍等就更普遍了。据说今年真人版变形金刚电影也要与观众们见面了,这可是我们这一代的变形金刚迷的一个快乐节日呀。

一想起童年的趣事,自己就写下了这么多。儿时的那些快乐也许长大后再也体会不到了。

C++咬文嚼字-'Functions'

关于Functions,Bjarne Stroustrup在'The C++ Programming Language'一书中是这么开篇的:'The typical way of getting something done in a C++ program is to call a function to do it.';另外他还阐述了一个使用Functions的原则:'A function cannot be called unless it has been previously declared.'。

函数的声明和定义要一致,这里的一致是指函数名字、返回类型和参数列表(不包括参数名字)的一致。参数名字是被编译器ignored的,所以在声明时你完全可以不显式写出参数名:
int func(char*, int); // a declaration with no explicit argument names
当然从代码的可读性等考虑,还是建议声明时写上参数名:
int func(char* array, int size);

声明和定义的参数名字可以不相同,编译器关注的是参数列表的各个参数类型。
int func(char* c, int i); //a declaration
int func(char *array, int size) {…} // a definition

这里补充一点就是如果你给某个函数声明了一个参数,你在实现这个函数时最好用上这个参数。

使用或者调用一个函数就涉及到另外两个方面了:参数传递(Argument passing)和函数返回值(Return value)。参数传递和函数返回值在语义上等价于变量初始化(initialization),与变量赋值(assignment)语义有区别。

这里首先区分一下变量初始化(initialization)与变量赋值(assignment):
很显然变量初始化发生在这个变量生命周期的最开始阶段,任何一个变量的生命都源于编译器给它分配一块存储区域,而初始化就紧跟在内存分配之后,用初始值覆盖这块内存,通过这两步操作完成一个对象(无论是built-in还是user-defined)的建构,换句简洁的话说:初始化是用来创建对象的,是创建对象的一个步骤;在未执行该步骤时,这个对象从语义上讲还不存在;而变量赋值操作则是修改一个对象,这个对象在被赋值之前已经存在了,有自己的存储空间并且已经有过初始化操作,是一个语义上真实存在的对象;赋值操作仅仅是改变了那块内存区域的值或者是bit序列分布而已。

上面说过参数传递(Argument passing)从语义上相当于变量初始化,那么当一个实参(Actual argument)被传递给一个函数后,究竟是哪个变量被初始化了或者说被创建了?初始化过程又是如何呢?举例说明:
int func(T value_formal_arg, T* ptr_formal_arg, T& ref_formal_arg); //这是一个函数声明,囊括了passed by value, passed by pointer, passed by reference全部三种参数传递方式

int main() {
 //…
 int rv = func(value_actual_arg, ptr_actual_arg, ref_actual_arg);
 //…
}

在参数传递过程中,完成了三个对象的创建,上面的func函数在传参的时候相当于:
int func(…) {
 T value_formal_arg = value_actual_arg;
 T* ptr_formal_arg = ptr_actual_arg;
 T& ref_formal_arg = ref_actual_arg;
 
 //接下来使用value_formal_arg,ptr_formal_arg和ref_formal_arg
}
从此可以看出,三个在function scope内的临时变量被在栈上分配内存,并分别被三个实参初始化了。当然有时候传进来的实参不能直接用于初始化,编译器要进行类型检查,看看传进来的实参是否匹配形参类型,对于兼容的类型做标准的或者用户自定义的implicit type conversions,对于完全不匹配的报告编译错误。
void print(int i) {…}

double d = 1.0;
print(d); //这里在传参的时候需要做一个将实参d转型为int型的implicit type conversion

void handle(int &i);

handle(1); //这里由于形参为non-const reference,而初始化语义不支持将常数直接用来初始化non-const reference,所以这里编译器会报告一个编译错误

说完了参数传递过程,接着看函数返回过程。前面同样提到了函数返回的语义也相当于变量初始化,那么我们同样要问这样一个问题:函数返回的过程中返回值到底用来创建哪个对象了?

T func(…) {
 //…
 return t; //t是T类型的
}

T rv;
rv = func(…);
当func返回时,返回值是用来初始化rv了么?根据上面我们所说的initialization和assignment的区别,我们可以断定这显然不是。那么返回值又是初始化哪个对象了呢?这里又有一个临时对象产生了。上面的语句等价于:
T rv;
T temp = t; //func的返回值t被用来创建一个临时对象temp
rv = temp; //这个临时对象最终被用来对rv进行assignment了

在C++中,以by value方式返回一个对象是效率不高的,特别是当返回复杂的user-defined类型时,其带来了额外的构造、拷贝构造和析构的损耗。在Scott Meyers的'More Effective C++'书中的条款20讲解了如何编写代码来配合编译器的'Return Value Optimization, RVO'优化技术,当编译器开启这种优化后,像上面我们的例子可以这么写:
T rv = func(…);

函数返回过程也许就会被优化成:
T rv = t;

C++的Function还提供了Default arguments机制,这里要注意的就是当函数有多个参数的时候,应该如何提供默认参数。比如:
void func(int a = 1, int b = 2, int c = 3); // ok
void func(int a, int b = 2, int c =3); // ok
void func(int a, int b, int c = 3); // ok
void func(int a = 1, int b, int c); // error

int main() {
 func(); //call func(1, 2, 3)
 func(5); //call func(5, 2, 3)
 func(5, 7); //call func(5, 7, 3)
}
知道void func(int a = 1, int b, int c);为什么错了吧?比如我调用func(5, 7);这实参5是传给a还是传给b呢?显然编译器不能resolve,那就只能给你报告错误了^_^。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系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