欢迎使用我的 在线工具

小D

读历史、看小说、写程序都是我所爱。技术不好,头脑不灵光,靠的是兴趣。
随笔 - 35, 文章 - 25, 评论 - 13, 引用 - 0
数据加载中……

关于函数

#include<iostream>
#include "string"
using namespace std;
/*
size_t count_calls()
{
 static size_t ctr = 0;
 return ++ctr;
}
*/
//不可以间隔省,不可以向后省,具体自己以编译器的角度理解
/*
string screenInit(string::size_type height = 24,
      string::size_type width = 80,
      char background = ' ')
{
 return "";
}
*/

bool lengthCompare(const string &str1, const string &str2)//声明一个函数
{
 if(str1.length() >= str2.length())
  return true;
 else
  return false;
}

void useBigger(const string &, const string &,
      bool(const string &, const string &));//将函数指针作为参数
void useBigger(const string &, const string &,
      bool (*)(const string &, const string &));//也可以这样传递函数指针。

int (*ff(int))(int *, int);//返回指向函数的指针,需要从里往外理解
//很难理解大致为 有一个ff(int)函数,他带有(int *, int)的参数,返回一个int
//可使用typedef简化为
typedef int (*FF)(int *, int)
FF ff(int)
//真鸡巴复杂


int main()
{
/* 
 typedef bool (*cmpFcn)(const string &, const string &); //只要函数类型相同皆可
 //所谓的函数类型,是指函数参数及其类型、个数、顺序等,还有返回值
 cmpFcn pf1 = 0;
 cmpFcn pf2 = lengthCompare;
 pf2("111","2222");//直接引用函数名等效于在函数名上应用取地址操作符
 pf1 = pf2;
 pf1("2222","111");//不需要使用解引用操作符*,直接通过指针调用函数。
*/ 
/*
 for(size_t i = 0;i != 100; ++i)
  cout<<count_calls()<<endl;
 return 0;
*/

 

return 0;
}

 

最后加几点注意:

1.  千万不要返回局部对象的引用,因为局部对象已被回收,所以引用将会变成空引用,而返回对象执行的是值拷贝,也就是重新生成了一个对象。

2. 如果不希望引用返回的值被修改,返回引用请声明为const,同理形参也是一样,如果不希望被修改请设为const。

3. 千万不要返回局部对象的引用,基本和引用相同,方法返回后局部对象被释放,所以指针为垂悬指针。

4. 默认实参是通过给形参表中提供明确的初始值来指定的。在函数声明中指定,而且在同一个文件中只能为一个函数指定一次。

posted on 2009-11-04 19:19 vagasnail 阅读(262) 评论(0)  编辑  收藏 所属分类: C\C++


只有注册用户登录后才能发表评论。


网站导航: