函数
1.引用返回的是左值,可以赋值
2.返回数组指针
int (*func(int i))[10];
int even[]={0,2,4,6,8};
int odd[]={1,3,5,7,9};
decltype(odd) *arrptr(int i) // decltype并不负责把数组类型转换成对应的指针类型,所以它的结果仍然是个数组 返回 数组指针
{
return i%2?odd:even;
}
3.const_cast和重载
const string &shorterString(const string& s1,const string &s2)
{
return s1.size()>s2.size()?s1:s2;
}
string &shorterString(string& s1,string &s2) // 函数重载 该函数写的非常好 代码很漂亮
{
auto &r=shorterString(const_cast<const string&>(s1),
const_cast<const string&>(s2));
return const_cast<string &>(r);
}
4.函数指针
// 比较两个string对象的长度
bool lengthCompare(const string &,const string &); // 函数声明
// pf指向一个函数,该函数参数是两个const string&,返回值为bool类型
bool (*pf)(const string &,const string &); // 函数指针 (*pf)必须加括号,否则就变成了返回bool*类型
pf = lengthCompare; 或者 pf =&lengthCompare; // 等价赋值 &可选
typedef bool Func(const string &,const string &);
void useBigger(cosnt string &,const string &,Func); // Func函数类型,形参中会自动转换为函数指针类型
类似于:void useBigger(cosnt string &,const string &,bool Func(const string &,const string &));
类似于:typedef decltype(lengthCompare) *FuncP2;
void useBigger(cosnt string &,const string &,FuncP2);
5.尾置返回类型
C++11中一种简化声明的方法,就是使用尾置返回类型。任何函数定义都能使用尾置返回类型。尾置返回类型都跟在形参列表的后面并以一个->符号开头,在本该返回类型的地方放置一个auto
// func接受一个int类型的实参,返回一个指针,该指针指向一个含有十个元素的数组
auto func(int i)->int (*)[10];