C++ 之 lambda表达式,断言等

Lambda表达式有什么作用?

最直观的作用就是使得代码变得异常简洁。防止污染环境。基本上就是为了防止污染环境吧。一般用两次的,函数内定义一个匿名表达式,这就很爽了。

C++的匿名表达式还是蛮强大的。

断言通常是用来验证参数的正确性的(判断一个表达式,如果结果为假,输出诊断消息并中止程序。),不至于说传过来一个null,在不知道的地方给空指针报错了。。。或者说,条件没有想全,一个assert填充位置,等到后期完善的时候改。

ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略掉。(在C中,ASSERT是宏而不是函数),使用ASSERT“断言”容易在debug时输出程序错误所在。
   而assert()的功能类似,它是ANSI C标准中规定的函数,它与ASSERT的一个重要区别是可以用在Release版本中。

使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。
在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:
#include <stdio.h>
#define NDEBUG
#include <assert.h>

在新的C++标准中C++0x中,加了对静态断言的支持,引入了新的关键字static_assert来表示静态断言。使用静态断言,我们可以在程序的编译时期检测一些条件是否成立。但这个关键字太新了,没有几个编译器是支持的(好像VC2008支持,我用VC很少,主要是在linux下C++编程)。于是可以使用C++现有的模板特性来实现静态断言的功能。

静态断言在编译时进行处理,不会产生任何运行时刻空间和时间上的开销,这就使得它比assert宏具有更好的效率。另外比较重要的一个特性是如果断言失败,它会产生有意义且充分的诊断信息,帮助程序员快速解决问题。

语法:

static_assert(常量表达式,"提示字符串")

注解:如果第一个参数常量表达式的值为false,会产生一条编译错误。错误位置就是该static_assert语句所在行,第二个参数就是错误提示字符串。

我死了,C++新特性真的太多了。。。

只能规划着做。

class D1 : B1 {

using B1::B1;//表示继承B1的构造函数

};

相当于java.super();感觉不错啊。。。但是,他只能完全继承。这个构造能自动对应所有的构造。

std::map<int, int> tmp;
//对于std::map的[]运算符重载函数,在使用[]新增key时,std::map就已经插入了一个新的键值对
tmp[0] = tmp.size();//此处不知道插入的是{0, 0}还是{0, 1}

①后缀表达式从左到右求值。这包括函数调用和成员选择表达式。

②赋值表达式从右向左求值。这包括复合赋值。

③从左到右计算移位操作符的操作数。

给模板定义新类型用

template <typename T>
using NewType = SuckType<int, T, 1>;    // 合法

 

模板的默认参数

template<typename T = int, typename U = int>
auto add(T x, U y) -> decltype(x+y) {
    return x+y;
}

这些新特性真的,哇,多姿多彩。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值