标签:
C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型!
函数名就是变量!函数名就是变量!函数名就是变量!
重要的事情要说三遍。。。
#include <iostream> #include <string> using namespace std; //test const int main(){ //------------测试非引用------------ int no=10; const int no2=no; //OK int no3=no2; //OK! //上面得出结论:非引用类型的赋值无所谓const //------------测试引用------------ int &noref=no; const int &noref1=no; // int &no2ref=no2; const int &no2ref1=no2; int &no3ref=no3; const int &no3ref1=no3; // 上面得出结论:const引用可以指向const及非const。但非const引用只能指向非const。 //------------测试指针------------ int *pno=&no; const int *pno_1=&no;//指向const的指针,可以指向非const // int *pno2=&no2;//指向非const的指针,只能指向非const const int *pno2_1=&no2; int *pno3=&no3; const int *pno3_1=&no3; // 上面得出结论:见备注 return 0; }
typedef bool (*cmpFcn) (const string &, const string &);
cmpFcn pf1=0; //ok cmpFcn pf2=lengthCompare; //ok pf1=lengthCompare; //ok pf2=pf1; //ok
cmpFcn pf1=lengthCompare;
cmpFcn pf2=&lengthCompare;
lengthCompare("hi", "bye"); //直接调用函数 pf("hi", "bye"); //隐式解引用! (*pf)("hi", "bye"); //显式解引用!
void func(const string &, const string &, bool(const string &, const string &)); //隐式 void func(const string &, const string &, bool (*)(const string &, const string &)); //显式
int (*ff(int))(int*,int); //QNMD 其中:ff(int) 是函数,返回 int (*)(int*,int),也就是返回函数指针。
#include <iostream> #include <string> using namespace std; int strCmp(const string&, const string&); int xxx(const string&, const string&); //函数指针 int main(){ string str1="hehe"; string str2="abc"; cout<<"strCmp(str1, str2):"<<strCmp(str1, str2)<<endl; //函数指针 int (*ext)(const string&,const string&); //(*strCmp)的括号是必须的。如果声明:int *strCmp(const string&, const string&) typedef int (*fp)(const string&, const string&);//类似声明 fp p0=0; cout<<"p0:"<<p0<<endl; fp p1=strCmp; fp p2=p1; p0=p2; cout<<"p0(\"---\", \"xxxxxxx\")"<<p0("---", "xxxxxxx")<<endl; cout<<"p1(str2, str1):"<<p1(str2, str1)<<endl; //why? cout<<"p2(str2, str1):"<<p2(str2, str1)<<endl; //why? fp p3=xxx; cout<<"p3:"<<p3<<endl;//why 1? cout<<"p3(\"a\", \"b\"):"<<p3("a", "b")<<endl; ext =xxx; cout<<"ext:"<<ext<<endl;//why 1? cout<<"ext(str1, str2):"<<ext(str1, str2)<<endl; //结论:type (*pf)(parameter list)就已经定义了一个函数指针pf。 //typedef可以定义函数指针的类型,而非函数指针。该类型可以定义指针。 //0函数指针输出0;其他则输出1。 //通过函数指针可以直接调用函数:只要后面跟上实参列表即可!函数指针会隐式的解引用--当然也可以显式的解引用! return 0; } int strCmp(const string &str1, const string &str2){ return str1.size()-str2.size(); } int xxx(const string &str1, const string &str2){ return 11111; }
typedef int func(p.l);//这里的func是函数类型,不是函数指针!所有int xxx(p.l)形式的函数! void f1(func); //ok 函数类型可以作为形参 func f2(int); //error 函数类型不能作为返回值! func *f3(int); //ok 函数类型指针可以作为返回值(其实就是函数指针)
C++ Primer学习笔记(三) C++中函数是一种类型!!!
标签:
原文地址:http://www.cnblogs.com/larryzeal/p/5593460.html