-
不要返回局部对象的引用或指针
-
返回类累心的函数和调用运算符
-
引用返回左值
-
列表初始化返回值
-
主函数main的返回值
-
调用重载的函数
(a). int calc(int,int); int calc(const int, const int); //定义一个整型函数calc,有两个const int型形参,与上一个 //定义等价,重复声明 (b). int get(); double get(); //定义一个double型函数,声明有问题,函数进行调用时,因为函数的形参 //为空,编译器无法判读调用哪个函数 (c). int *reset(int *); double *reset(double *); //定义一个指针函数,类型为double *,形参类型也是double *
-
重载和作用域
内层将会隐盖外层的函数,只调用内部函数,函数名字查找发生在类型检查之前。 -
默认实参
将多个形参设定为默认值,注意,如果第一个形参有默认值,那么后面的形参也必须要有默认值。
默认实参声明
/*
练习6.54
编写函数的声明,令其接受两个int形参并返回类型也是int;然后声明一个vector对象,令其元素是指向该函数的指针。
int func(int a,int b);
typedef int (*pf)(int,int);
std::vector<pf> v;
int func(int,int);
using pFunc = decltype(func) *;
std::vector<pFunc> v1;
*/
#include <iostream>
#include <string>
#include <vector>
using std::vector;
using std::cout;
inline int f(const int,const int);
typedef decltype(f) fp;
inline int numAdd(const int n1,const int n2) {return n1+n2;}
inline int numSub(const int n1,const int n2) {return n1-n2;}
inline int numMul(const int n1,const int n2) {return n1*n2;}
inline int numDiv(const int n1,const int n2) {return n1/n2;}
vector<fp*> v{numAdd,numSub,numMul,numDiv};
int main()
{
//
// @brief Exercise 6.56
// @note Call each element in the vector and print their result.
//
for(auto it = v.cbegin();it != v.cend();++it)
cout <<(*it)(2,2)<<std::endl;
}
下面看第7章
网友评论