C++ 11(三)


1.返回数组的指针:

 1)函数可以返回数组的指针或引用 : int (* func ( int i ) ) [10] 表示:func这个函数需要一个int实参,并且我们可以对函数调用后的结果进行

         解引用,并且解引用之后得到的是一个大小为10,元素类型为int型的数组。

2)也可以使用尾置返回类型:尾置返回类型跟在形参列表后面并以一个 -> 符号开头,例如: auto func(int) -> int (*) [10] ,(让我想起了Swift 微笑

      c++11

2.重载:

1)通过typedef   or   using new_type= old_type  的类型不能构成重载函数。

例子:

typedef size std::vector<int>::size;
auto func1(const size&);
auto funn1(const std::vector<int>::size&);

上面的一组函数是同一个函数。

除了返回类型不一样,形参表一样的函数,是一个错误,而不是一个重载。

2)在作用域里面声明函数,会覆盖外层函数(bad choice),c++的名字查找发生在类型检查之前。

3)默认实参:一旦某个姓餐被赋予了默认值,那么它后面的所有形参都必须有默认值。因为默认实参负责填补函数调用缺少的尾部实参,而不是哪里空缺填哪里。

4)顶层const 的形参无法和一个non_const 的形参区分开来,只有拥有底层const 的形参可以和 non_const 的形参区分开来。

3.constexpr 函数:指能用于常量表达式的函数,函数的返回类型及所有的形参的类型都得是字面值类型,并且函数体里面有且仅有一条return语句,

constexpr 函数被隐式地指定为内联函数,并且constexpr函数不一定返回常量表达式(?)。

4.函数指针:

1)例子: 

bool lengthCompare(const std::string& first, const std::string& second);
bool (*pf)(const std::string&, const std::string&);

pf = lengthCompare;
pf = &lengthCompare;

bool b1 = pf("as","df");
bool b2 = pf("as","df");
bool b3 = lengthCompare("as","df");
第一行声明一个函数,接受两个const 的string类型的引用

第二行声明一个函数指针,表示这个pf是一个指向接受两个const 的string类型的引用的函数的指针

接下来两行是等价的pf指针初始化,当我们把函数名作为一个值使用时,该函数自动地转化为指针

接下来三行是等价的同一个函数的调用,pf照样有着解引用操作。

2)指向不同函数类型的指针间不存在转换规则,一旦声明了指针所指向的函数的返回类型和形参表,那么其他不匹配的返回类型和形参表的函数

就不能赋值给该指针。

3)函数指针形参:我们不能定义函数类型的形参,但是形参可以是指向函数的指针。

4)返回指向函数的指针:using PF = int (*) (int*,int)  这个声明表示的是: PF是这么一个类型:指向  接受两个参数,一个是int类型指针,一个是int 类型

并且返回int类型的函数 的  指针。

怎么使用:

PF func(int) : 相当于 func是一个函数,接受一个int型参数,返回一个指向  接受两个参数,一个是int类型 指针,一个是int类型并且返回int类型

     的函数的指针。

我们使用尾置返回类型的方式更清晰: auto  f1(int) ->  int (*) (int* ,int);这种更加容易读清楚。 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值