您的位置:首页 > 编程语言 > C语言/C++

C++(一)

2016-01-20 14:51 253 查看

auto

vector
<
int> number(5,10);

for(auto& e:number)

{

e=e+2;

cout
<<
(int)e
<<
endl;

}

纯虚函数在基类中只有声明而没有定义,必须在子类中加以实现,相当于java中的接口。虚函数可以在基类中定义,在子类中可以重写也可以不重写虚函数。

virtual void func()=0;

在函数前面添加virtual虽然牺牲一些性能,但增加了面向对象的多态性。

lambda表达式、匿名函数

[capture] (parameters)->returntype{body},返回值可以省略。

[capture]称为闭包,lambda函数可以引用在它之外声明的变量,这些变量的集合称为闭包,闭包变量分为按值或按引用使用。

[ ] //未定义变量,在lambda中使用任何变量都是错误的

[x,&y] //x按值使用,y按引用使用

[&] //用到的任何外部变量都隐式按引用捕获

[=] //用到的任何外部变量都隐式按值捕获

[&, x] //x显式地按值捕获. 其它变量按引用捕获

[=, &z] //z按引用捕获. 其它变量按值捕获

lambda函数是函数对象类型,使用auto类型存储lambda函数。

auto f1=lambda_function();

auto f3=new auto(lambda_function());

decltype(f1) f2=lambda_function();

如果要把lambda函数作为一个参数来传递,形参的类型必须是模板类型或者std::function对象。

一个没有指定任何捕获的lambda函数,可以显式地转换成一个具有相同声明形式的函数指针。

auto lambda_func=[][int x] {…};

void (*func_ptr)(int)=lambda_func;

func_ptr(5);

Function

std::function的实例对任何可调用的目标实体进行存储、复制和调用操作,这些目标实体包括普通函数、lambda表达式、函数指针、类方法等。

std::function

引用

引用就是一个变量的别名,对引用的操作和对变量直接操作完全一样。

类型标识符 &引用名=目标变量名;

声明引用时必须对它进行初始化,引用本身不占存储单元,对引用求地址和对目标变量求地址一样。

传递引用给函数与传递指针的效果一样,一般引用参数定义为常引用。

const 类型标识符 &引用名=目标变量名;

引用可以达到多态的效果,一个基类的引用可以指向它的派生类型实例,该引用只能用来访问派生类实例中从基类继承下来的成员。

C++中,临时对象都是const类型的。引用作为返回值:

函数定义格式: 类型标识符 &函数名(形参列表及类型说明){函数体}

注意不能返回局部变量的引用;不能返回函数内部new分配的内存的引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: