14-3 列表初始化有底层类型的枚举对象(C++17)
/
正常情况下,decltype(e)
的cv限定符会同步e的cv限定符。但是如果e是未加括号的成员变量时,父对象表达式的cv限定符会被忽略。
[capture](params) specifiers exception ->ret { body } |
lambda表达式由下面几个部分组成:
【capture】:捕获列表,必写
【params】:参数列表,可选
【specifiers】:限定符,可选
【exception】:异常说明符,可选
【ret】:返回值类型,可选
【body】:函数体,必写
在下面的应用场景里,因为需要的模板参数是类型,因此将lambda的类型传入时,由于会创建相应的对象,而lambda表达式的默认构造函数被删除了,因此在C++20前不能使用。
lambda表达式本质上是创建了一个类,然后实例化一个类对象。函数体是该类的重载运算符()
,调用lambda表达式时,本质就是调用这个对象的()运算符函数。