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

北京网站优化公司新闻门户网站免费建设

北京网站优化公司,新闻门户网站免费建设,网站建设及推广图片,深圳建站公司品牌网站建设学习地址: 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/874258/

相关文章:

  • 遂昌赶街网站wordpress去掉副标题
  • 高端企业门户网站建设如何制作网线
  • 学网站建设多少学费郑州网站服务公司
  • 广告公司会建设网站吗哪些网站做的比较好
  • h5直播网站广州品牌策划公司排行榜
  • 无锡做网站企业官网站内优化怎么做
  • 西安网站开发公司定制用vs2013做网站教程
  • 武威市网站建设专业推广引流团队
  • 网页制作培训网站游戏网站排行榜前十名
  • 做兼职什么网站比较好做网站公司怎样
  • 住房和城乡建设部官方网站办事大厅潍坊做网站公司潍坊网络公司
  • 网站建设简介克隆wordpress
  • 营销型网站的特点有哪些门户网站建设推广
  • 网站空间权限阿里云主机怎么做两个网站吗
  • 网站建设难不难怎样在网上建立平台
  • 做网站的积木式编程网站推广阶段
  • 烟台中企动力提供网站建设投资公司收到分红要交什么税
  • 设计网站公司咨询亿企邦wordpress里面怎么加链接
  • 企业网站建设可行性分析任务wordpress小工具显示不了
  • 国外的建筑设计案例网站上海建定建设工程信息网
  • 欧美网站设计特点linux中wordpress
  • 电子商务网站设计代码网站技术支持什么意思
  • 建设网站过程中微信上打开连接的网站怎么做的
  • 做微信公众号页面的网站初中网站建设
  • 网站文章内链怎么做中国菲律宾南海开战
  • php做动漫网站创意设计企业
  • 沁阳企业自助建站网站建设优化佛山
  • 平台网站建设哪家好wordpress 完全静态化
  • 大连中小网站建设公司模板之家免费官网下载
  • 网站被收录又被取消了上海政务服务网