Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303112
  • 博文数量: 148
  • 博客积分: 4365
  • 博客等级: 上校
  • 技术积分: 1566
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-05 21:38
文章分类
文章存档

2014年(2)

2013年(45)

2012年(18)

2011年(1)

2009年(54)

2008年(28)

我的朋友

分类: C/C++

2013-01-26 12:23:11

Chapter 6 Functions

1. 变长参数列表利器:initializer_list。

c中也有一个varlist记得,c++11中新增加的initializer_list只能处理变长参数列表中所有参数都是同一类型的场景,就像一个参数容器。

不同类型参数列表SBL说在16章有介绍。

void f(initializer_list vs){
for(auto s: vs)
	cout<
调用的时候结合新增的大括号赋值 
f({"hello","world"});
注意:(1-函数参数中有initializer_list时,要么只有这一个参数,像上面的f;要么其位于所有参数的最后

f(initializer_list vs, int flag);//这样编译无法通过的 

(2-initializer_list带入的参数都是只读的,不可更改。

(3-initializer_list有begin,end,size这三个成员函数。

2.函数可以返回list-initializing,就是大括号那种

vector f2(){
return {"hello","world"};
}

不一定非要用vector,可以是定义了接受list-initializing为参数的类型。

3. 简化函数的返回值。但返回值比较复杂时很有用。

(1)使用 trailing return type,格式为函数参数后面加 “-> type”

auto f(int)->int;//接受int参数,返回int的函数

auto f()-> int(*)[10];//返回指向10个int元素数组的指针

(2)用decltype

int a[10];

decltype(a) * f();//返回指向10个int元素数组的指针,因为decltype不会进行数组向指针的转换,所以需要加*。

4. constexpr 修饰的常函数。

constexpr加在函数最前,表示这个函数返回值是个常量。

constexpr f(){return 3;}

constexpr f(int i){return 3*i;}

以上都可以,特殊限制是函数体内严格只能有一个return语句,否则编译不过

 body of constexpr function 'constexpr int f3(int)' not a return-statement

constexpr函数是隐含内联的,所以应该和其它内联函数一起放在头文件。

阅读(462) | 评论(0) | 转发(0) |
0

上一篇:标准库容器相关

下一篇:类基本定义相关

给主人留下些什么吧!~~