一级棒(Eachfun)
偷猫的个人主页
函数的定义
发表时间:2006-07-24 01:46:00 关键词:C++,MFC,VC,Primer,编程,教程,读书

  不记得在哪本书上看到过,函数的定义为“有名称的一段代码”。这大概地说明了函数的实质:首先、它是一段代码,其次、这段代码可以被重复使用而不必重复编写,第三、它是有名字的,在需要重用的时候凭名字来调用。
  这个说法到了C++中变得复杂了。原因之一是C++支持函数重载,也就是说出现了同名函数。虽然编译器在编译时产生不同的函数名,但那必竟是编译器的事,对于程序员来说就是同一个函数名。原因之二是C++支持运算符重载,可以用一个类似于“+”号的运算符来调用函数。运算符重载明摆着是为了配合类对象的运算,因为如果没有类,仅针对内置类型,运算符是没必要重载的。——我试验了一下,自定义了一个“int operator +(int i, int j)”函数,结果没有通过编译。
  于是,到了C++中,函数的概念被修改为“函数由函数名以及一组操作数类型唯一地表示”,依我看,这样说还不够。严格说来,应该说“函数由作用域、函数名以及一组操作数类型唯一地表示”,理由很简单,因为在不同的作用域中可以出现名称相同、参数类型也相同的函数,除非把“作用域::函数名”合起来看作一个函数名。
  函数对函数体没有任何强制性要求,哪怕函数体为空也可以。不过,无论是空、一句语名,还是多句语句,花括号一定不可少。在这里,包括在花括号内的若干行语句不能再视为一个复合语句了——因为能放复合语句的地方也能放简单语句,而简单语句可以不使用花括号。
  不管你如何看待这组花括号,有一点是肯定的:花括号内部是一个作用域。那么,内部定义的变量就只有在内部使用了。这就是局部变量,在任何函数(包括main())内部定义的变量都是局部变量——初学者可能以为在main()内部定义的变量是全局变量。
  有一种内部变量的定义与以往的定义方式不一样,那就是函数的参数。不同之处在于:一是它们用逗号分隔,二是不允许用“int i,j”这样的方式定义一组变量。我想,也许正是因为所有定义用逗号分隔,才造成不允许后者的吧,毕竟这样会带来歧义——j没有指定类型。如果用分号来分隔,那么后者的方式也许就可以了。这是C++标准的事,我没有能力来为标准出谋划策,只能妄加猜测了。
  函数的返回值也是一个类型,与变量的类型一样,它可以是内置类型,也可以是类类型,还可以是引用和指针。
  引用:在C++标准化之前,如果缺少显式返回类型,函数的返回值将被假定为int型。
  笔记:据我测试,在VC++.NET中,这样做是可以的。照这么说,VC++.NET仍然没有按照C++标准做?或者说VC++.NET迁就了老程序员?

本站特约顾问律师常州东晟律师事务所朱立律师(电话13915029670,QQ646146109)提醒您:
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
相关评论
  • 函数的参数当然不能使用类似int i,j的方式,因为调用函数的时候,涉及到的不仅仅是定义参数,还有把要处理的变量入栈,调用的函数运行前的第一件事,是把被入栈的变量出栈.
    这与int i,j定义变量做的事完全不同,所以,不按定义变量的方式写,也很正常.
    如果偷猫兄一定要写得一样,那就自己做一个编译器吧.
    personwalkman link未填 QQ未填 email未填 时间:2006-07-24 10:23:00
1
发表评论
称呼:
QQ:
邮箱:
链接:
内容:
搜索: 百度搜索 Google搜索
Copyright©2000 - 2011 Eachfun.Com, All Rights Reserved 一级棒网络
备案号忘了带来
一级棒建站系统 http://www.eachfun.com 一级棒版权所有,未经许可不得商用!