C++11常用语法

1、Lamda函数
在工作中Lamda函数的一个使用场景:一个函数中重复代码比较多,并且需要减少圈复杂度,又不想独立成函数(上下文不够清晰,函数抽象也比较蹩脚),这时候Lamda函数就派上用场了。
C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). Lambda表达式具体形式如下:
    capture->return-type{body}
  如果没有参数,空的圆括号()可以省略.返回值也可以省略,如果函数体只由一条return语句组成或返回类型为void的话.形如
     capture{body}
lambda函数是一个依赖于实现的函数对象类型,这个类型的名字只有编译器知道. 如果用户想把lambda函数做为一个参数来传递, 那么形参的类型必须是模板类型或者必须能创建一个std::function类似的对象去捕获lambda函数.使用 auto关键字可以帮助存储lambda函数,

auto my_lambda_func = [&](int x) { // };
auto my_onheap_lambda_func = new auto([=](int x) { // });

2、function 函数包装器
function可以用普通函数、类成员函数来赋值,这样非常方便,记得刚入职的时候看到一个将类成员函数用作回调函数的时候,那叫一个繁琐,自从有了function,再也不用记复杂语法了。
#include
class B
{
public:
void registerFuncA(function<int(int)>)
{
m_f = f;
}
void test(int v)
{
m_f(v);
}
private:
function<<int(int)>> m_f;
};

class A
{
public:
B testB;
void test()
{
testB.registerFuncA([this](int v) { return v+this->m_a}); //和lamda函数一起使用,这样就把类成员很轻松的传入了
testB.test(30);
}
private:
int m_a = 10;
};

int main()
{
A a;
a.test();
}

在没有lamda函数之前,需要使用std::bind来绑定类非静态成员函数
形如std::bind(&B::test, &b, std::placeholders::_1)); 占位符用于传入函数入参
3、shared_ptr和make_shared
C++11支持make_shared用于动态内存申请,这样就不需要显示的调用new和delete,有效防止内存泄漏
在android::sp和boost::shared_ptr设计模式章节中提到不同的软件设计方法,对于std::shared_ptr也是一样的,非常方便使用
4、可变模板参数和完美转发
tempate<class Function, class …Args>
auto FunctionWrapper(Function &&f, Args &&…args)
{
retrun f(std::forward<Args>(args)…)
}
想到了第一个问题,有些模板函数调用比如func(1),为什么需要显示指定模板类型呢?1种情形是模板类型表示的是返回值,一种是说无法正确推倒出来,这种情形下需要显示指定,除此之外的大部分场景是不许还要显示指定的。
第二个问题:可变模板参数展开,其中一种方式是采用递归的方法
//递归终止函数
template<typename T>
void myprint(T end)//递归到最后一次,调用单参数函数
{
cout << "parameter " << end << endl;
}

//展开函数
template<typename T,class …Args>
void myprint(T head, Args… rest)
{
cout << "parameter " << head << endl;
myprint(rest…);
}

int main()
{
myprint(1, 2, 3, 4);
return 0;
}
4、SFINAE
https://blog.csdn.net/guangcheng0312q/article/details/103884392
编译内省
5、shared_ptr和动态数组
https://blog.csdn.net/u011559046/article/details/122858083

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值