`

在C + + 0 x新标准中,使用构造函数初始化列表和序列

 
阅读更多

介绍

C+ + 03初始化是前后矛盾。例如,它不让你初始化POD数组 是类成员和圆荚体阵列使用新分配。c++的限制规则变得更明显03初始化时,你需要初始化一个容器对象填充。通常,你要强迫自己用的是一种笨重的回路作为一个解决办法:


这是低效率的,而且很不方便。

幸运的是,C + + 0 x标准修改规定初始化。C + + 0 x几乎会让你每一个对象初始化,包括STL容器,使用括号符号= {…}。在接下来的段落里,我将向你展示如何使用C + + 0 x初始化的符号初始化对象的数组,动态分配的数组与STL容器。我要检查这种现象的潜在机制,使容器支撑的初始化的二个数字滴答响。


在c++中,你使用03以下句法:A a(0,0);

在C + + 0 x你也可以使用braces 来达到相同的效果。

那些有数组的类被证明是一个严重的问题在C + + 03到初始化有关


同样的,现在能初始化容器

在C + + 03中,你会典型的“初始化“容器有环()重复push_back调用:

<code>
std::vector<int> vi;
for (int i=0; i<3; i++)
 vi.push_back(i);
</code>

够初始这是低效率的,而且很不方便。它的时间投标。循环象上图再见。下面是C++ 03你如何初始化向量在化一个动态数组

同样地,初始化map从来都不容易。

它是如何工作的

不要让支撑符号误导你。当你初始化一个向量像这样:


编译器默默地扭转了这个代码分成构造的调用。. 构造函数初始化,vi在运行时间。C + + 0 x标准库提供它现在容器(和其他几个标准模板类如)与人们所知一个序列的构造器。构造函数是一个序列将单一参数的类型:initializer_list:这里的一个例子,有一个序列的构造函数。

构造函数的初始化一个序列让你任意数量的对象构造者被视为一种初始化器list:initializer_list < T >是一个标准模板类中定义的新的标题< initializer_list >。例如:initializer_list序列的构造转换成一个数组类型T T[n](在n的实际数量封闭在括号内构造)和使用该数组来初始化它的客体。

类模板的initializer_list有三个成员函数,这些函数的授权访问构造的序列。


序列:向量构造的性病可能看起来像这样:

结论

.目前,一些编译器(包括GCC 4.4)支持STL容器初始目录。A在最近的最后委员会批准在匹兹堡会议草案在2010年3月,其他供应商有望实现统一的符号以及初始化器初始化列表很快。



分享到:
评论

相关推荐

    C语言FAQ 常见问题列表

    o 5.4 我有个函数,它应该接受并初始化一个指针 void f(int *ip) { static int dummy = 5; ip = &dummy;} 但是当我如下调用时: int *ip; f(ip); 调用者的指针却没有任何变化。 o 5.5 我能否用 void** 指针作为参数,...

    你必须知道的495个C语言问题

    第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     7.5.1 构造函数初始值列表 258  7.5.2 委托构造函数 261  7.5.3 默认构造函数的作用 262  7.5.4 隐式的类类型转换 263  7.5.5 聚合类 266  7.5.6 字面值常量类 267  7.6 类的静态成员 268  小结 273  术语...

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     7.5.1 构造函数初始值列表 258  7.5.2 委托构造函数 261  7.5.3 默认构造函数的作用 262  7.5.4 隐式的类类型转换 263  7.5.5 聚合类 266  7.5.6 字面值常量类 267  7.6 类的静态成员 268  小结 273  术语...

    《你必须知道的495个C语言问题》

    书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    7.4.4 在构造函数中使用初始化列表 316 7.4.5 声明显式的构造函数 317 7.5 类的私有成员 318 7.5.1 访问私有类成员 320 7.5.2 类的友元函数 321 7.5.3 默认复制构造函数 323 7.6 this指针 325 7.7 类的const...

    Visual C++ 2005入门经典--源代码及课后练习答案

    7.4.4 在构造函数中使用初始化列表 320 7.5 类的私有成员 320 7.5.1 访问私有类成员 323 7.5.2 类的友元函数 324 7.5.3 默认复制构造函数 326 7.6 this指针 328 7.7 类的const对象 331 7.7.1 类的...

    你必须知道的495个C语言问题(PDF)

    1 声明和初始化1 1.1 我如何决定使用那种整数类型? . . . . . . . . . . . . . . . . . . . 1 1.2 64 位机上的64 位类型是什么样的? . . . . . . . . . . . . . . . . 1 1.3 怎样定义和声明全局变量和函数最好? ....

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    7.4.4 在构造函数中使用初始化列表 7.5 类的私有成员 7.5.1 访问私有类成员 7.5.2 类的友元函数 7.5.3 默认复制构造函数 7.6 this指针 7.7 类的const对象 7.7.1 类的const成员函数 7.7.2 类外部的成员函数定义 7.8 ...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    7.4.4 在构造函数中使用初始化列表 7.5 类的私有成员 7.5.1 访问私有类成员 7.5.2 类的友元函数 7.5.3 默认复制构造函数 7.6 this指针 7.7 类的const对象 7.7.1 类的const成员函数 7.7.2 类外部的成员函数定义 7.8 ...

    Visual C++ 2005入门经典.part07.rar (整理并添加所有书签)

    7.4.4 在构造函数中使用初始化列表 7.5 类的私有成员 7.5.1 访问私有类成员 7.5.2 类的友元函数 7.5.3 默认复制构造函数 7.6 this指针 7.7 类的const对象 7.7.1 类的const成员函数 7.7.2 类外部的成员函数定义 7.8 ...

    Visual C++ 2005入门经典.part09.rar (整理并添加所有书签)

    7.4.4 在构造函数中使用初始化列表 7.5 类的私有成员 7.5.1 访问私有类成员 7.5.2 类的友元函数 7.5.3 默认复制构造函数 7.6 this指针 7.7 类的const对象 7.7.1 类的const成员函数 7.7.2 类外部的成员函数定义 7.8 ...

    Visual C++ 2005入门经典.part06.rar (整理并添加所有书签)

    7.4.4 在构造函数中使用初始化列表 7.5 类的私有成员 7.5.1 访问私有类成员 7.5.2 类的友元函数 7.5.3 默认复制构造函数 7.6 this指针 7.7 类的const对象 7.7.1 类的const成员函数 7.7.2 类外部的成员函数定义 7.8 ...

    Visual C++ 2005入门经典.part05.rar (整理并添加所有书签)

    7.4.4 在构造函数中使用初始化列表 7.5 类的私有成员 7.5.1 访问私有类成员 7.5.2 类的友元函数 7.5.3 默认复制构造函数 7.6 this指针 7.7 类的const对象 7.7.1 类的const成员函数 7.7.2 类外部的成员函数定义 7.8 ...

Global site tag (gtag.js) - Google Analytics