当前位置: 首页 > news >正文

织梦个人博客网站源码wordpress大学主题

织梦个人博客网站源码,wordpress大学主题,织梦网站上传数据库,三维家设计官网学习地址: http://c.biancheng.net/view/3730.html 8. C11列表初始化(统一了初始化方式) 我们知道,在 C98/03 中的对象初始化方法有很多种,请看下面的代码: //初始化列表 int i_arr[3] { 1, 2, 3 }; /…

学习地址: http://c.biancheng.net/view/3730.html

8. C++11列表初始化(统一了初始化方式)

  1. 我们知道,在 C++98/03 中的对象初始化方法有很多种,请看下面的代码:
//初始化列表
int i_arr[3] = { 1, 2, 3 };  //普通数组
struct A1
{int x;struct B{int i;int j;} b;
} a = { 1, { 2, 3 } };  //POD类型: POD 类型即 plain old data 类型,简单来说,是可以直接使用 memcpy 复制的对象。//拷贝初始化(copy-initialization)
int i = 0;
class Foo1
{public:Foo1(int) {}
} foo = 123;  //注意这里需要拷贝构造函数//直接初始化(direct-initialization)
int j(0);
Foo1 bar(123);

2 .为了统一初始化方式,并且让初始化行为具有确定的效果,C++11 中提出了列表初始化(List-initialization)的概念。

3 . 在上面我们已经看到了,对于普通数组和 POD 类型,C++98/03 可以使用初始化列表(initializer list)进行初始化,但是这种初始化方式的适用性非常狭窄,只有上面提到的这两种数据类型可以使用初始化列表。

4 . 在 C++11 中,初始化列表的适用性被大大增加了。它现在可以用于任何类型对象的初始化,请看下面的代码。

class Foo2
{
public:Foo2(int) {}
private:Foo2(const Foo2 &);Foo2 operator=(const Foo2 &);
};void testInitializer (){Foo2 a1(123);Foo2 a2 = 123;  //网站上面说 会报错error: 'Foo::Foo(const Foo &)' is private。但是我用xcode没有报错,断点进入到了Foo2(int) {}Foo2 a3 = {123};Foo2 a4{123};}

5 . a3、a4 使用了新的初始化方式来初始化对象,效果如同 a1 的直接初始化, 这里需要注意的是,a3 虽然使用了等于号,但它仍然是列表初始化,因此,私有的拷贝构造并不会影响到它。

6 . 注意我把第一个构造函数改为 explicit Foo2(int) {}之后 a2, a3报错

7 . 如果真的要用初始化列表,那么最好用a4这种

8 . 另外,如同读者所想的那样,new 操作符等可以用圆括号进行初始化的地方,也可以使用初始化列表:


int* a1 = new int { 123 };
double b1 = double { 12.12 };
int* arr1 = new int[3] { 1, 2, 3 };

9 . 除了上面所述的内容之外,列表初始化还可以直接使用在函数的返回值上:

struct Foo3 {Foo3(int i, double j){}
};
Foo3 func3() {return {1, 3};

9. lambda匿名函数的定义

  1. 定义一个 lambda 匿名函数很简单,可以套用如下的语法格式:

[外部变量访问方式说明符] (参数) mutable noexcept/throw() -> 返回值类型 {
函数体; };

1) [外部变量方位方式说明符]
[ ] 方括号用于向编译器表明当前是一个 lambda 表达式,其不能被省略。在方括号内部,可以注明当前 lambda 函数的函数体中可以使用哪些“外部变量”。
所谓外部变量,指的是和当前 lambda 表达式位于同一作用域内的所有局部变量。

2) (参数)
和普通函数的定义一样,lambda 匿名函数也可以接收外部传递的多个参数。和普通函数不同的是,如果不需要传递参数,可以连同 () 小括号一起省略;

3) mutable
此关键字可以省略,如果使用则之前的 () 小括号将不能省略(参数个数可以为 0)。默认情况下,对于以值传递方式引入的外部变量,不允许在 lambda 表达式内部修改它们的值(可以理解为这部分变量都是 const 常量)。而如果想修改它们,就必须使用 mutable 关键字。
注意,对于以值传递方式引入的外部变量,lambda 表达式修改的是拷贝的那一份,并不会修改真正的外部变量;

4) noexcept/throw()
可以省略,如果使用,在之前的 () 小括号将不能省略(参数个数可以为 0)。默认情况下,lambda 函数的函数体中可以抛出任何类型的异常。而标注 noexcept 关键字,则表示函数体内不会抛出任何异常;使用 throw() 可以指定 lambda 函数内部可以抛出的异常类型。

值得一提的是,如果 lambda 函数标有 noexcept 而函数体内抛出了异常,又或者使用 throw() 限定了异常类型而函数体内抛出了非指定类型的异常,这些异常无法使用 try-catch 捕获,会导致程序执行失败(本节后续会给出实例)。

5) -> 返回值类型
指明 lambda 匿名函数的返回值类型。值得一提的是,如果 lambda 函数体内只有一个 return 语句,或者该函数返回 void,则编译器可以自行推断出返回值类型,此情况下可以直接省略-> 返回值类型。

6) 函数体
和普通函数一样,lambda 匿名函数包含的内部代码都放置在函数体中。该函数体内除了可以使用指定传递进来的参数之外,还可以使用指定的外部变量以及全局范围内的所有全局变量。

2 . ⚠️需要注意的是,外部变量会受到以值传递还是以引用传递方式引入的影响,而全局变量则不会。换句话说,在 lambda 表达式内可以使用任意一个全局变量,必要时还可以直接修改它们的值。

3 . 比如,如下就定义了一个最简单的 lambda 匿名函数:[]{}

4 . 外部变量格式 功能
[] 空方括号表示当前 lambda 匿名函数中不导入任何外部变量。
[=] 只有一个 = 等号,表示以值传递的方式导入所有外部变量;
[&] 只有一个 & 符号,表示以引用传递的方式导入所有外部变量;
[val1,val2,…] 表示以值传递的方式导入 val1、val2 等指定的外部变量,同时多个变量之间没有先后次序;
[&val1,&val2,…] 表示以引用传递的方式导入 val1、val2等指定的外部变量,多个变量之间没有前后次序;
[val,&val2,…] 以上 2 种方式还可以混合使用,变量之间没有前后次序。
[=,&val1,…] 表示除 val1 以引用传递的方式导入外,其它外部变量都以值传递的方式导入。
[this] 表示以值传递的方式导入当前的 this 指针。

5 . ⚠️注意,单个外部变量不允许以相同的传递方式导入多次。例如 [=,val1] 中,val1 先后被以值传递的方式导入了 2 次,这是非法的。


void testLambda() {int num[4]{2,5,3,4};sort(num, num+4, [num](int x, int y)->bool{return x < y;});cout<< "sort:" <<endl;for (auto &n: num) {cout<< n <<endl;}
}
http://www.yayakq.cn/news/246292/

相关文章:

  • 网站开发款计入什么科目河北省招标投标信息网
  • 网站建设业务员话术北京网站域名快速备案
  • 荣县做网站的国内做家具外贸的网站有哪些
  • 个人网站建站目的今天上海出什么大事了
  • 云南网站建设哪家好wordpress文章编辑器
  • 有哪些网站可以做微商湘潭网站建设 磐石网络最好
  • 网站备案成功后青岛企业展厅设计公司
  • 网站推广计划方法网络架构模拟设计
  • 建筑企业资质查询官方网站淘宝卖家 打电话 做网站
  • 自身网站的平台建设为网站营销好处
  • 怎样不花钱做网站成都有哪些好玩的地方
  • 抖音代运营公司台州seo网站推广
  • 广州网站设计十年乐云seo大浪做网站
  • 山东电力建设第一工程有限公司网站注册房产网站建设网站推广
  • 搭建网站价格网站没有备案会被降权吗
  • 郑州定制网站山东app下载安装注册
  • 做外卖系统哪家网站做的好微信网页注册入口
  • 单页网站上传教程视频莱芜招聘信息最新招聘2023年
  • 郑州网站建设排行榜一个服务器大概需要多少钱
  • 仿别人的网站违法嘛中介房产管理软件推荐
  • 铜陵app网站做招聘信息顺德网站制作公司哪家好
  • 专教做蛋糕的网站松江品划做网站
  • 南京市鼓楼区建设局网站建设摩托车质量怎么样
  • 郑州网站建设公司服务公司广州企业网站seo
  • angularjs做网站互站网官网
  • 织梦cms做网站流程有口碑的大连网站建设
  • 免费发布推广的网站有哪些百度广告代理公司
  • 郑州市建网站企业网站代维护
  • 网站做链接代码东莞设计网站
  • 网站建设的源代码有什么作用六安论坛百姓杂谈