• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++11的初始化列表

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  初始化是一个非常重要的语言特性,最常见的就是对对象进行初始化。在传统 C++ 中,不同的对象有着不同的初始化方法,例如普通数组、POD (plain old data,没有构造、析构和虚函数的类或结构体)类型都可以使用 {} 进行初始化,也就是我们所说的初始化列表。而对于类对象的初始化,要么需要通过拷贝构造、要么就需要使用 () 进行。这些不同方法都针对各自对象。在传统C++中可以使用初始化列表如下:

#include<bits/stdc++.h>
using namespace std;

class A{
public:
	int a, b, c;
};
int main(){
	int arr[4] = {1, 2 ,3 ,4};  // 数组初始化
	A a = A{1,2,3};	   // 传统类列表初始化
	return 0;
}

为了解决这个问题,C++11 首先把初始化列表的概念绑定到了类型上,并将其称之为 initializer_list,允许构造函数或其他函数像参数一样使用初始化列表,这就为类对象的初始化与普通数组和 POD 的初始化方法提供了统一的桥梁。可以缉拿个类模板initializer_list作为构造函数的参数,则初始化列表就智能用于构造该函数。值得注意的是列表中的元素必须是5同一种类型或者可以转化为同一种类型。STL中提供了initializer_list作为参数构造函数,考虑vector的下列实例:

vector<int> a1(10);         // 定义了大小为10未初始化的int型向量
vector<int> a2{10};        // 使用initializer-list初始化,a2只有一个元素初始化为10
vector<int> a3{1, 2, 3};  // 使用initializer-list初始化,a3有三个元素1,2,3

偷文件initializer_list提供了对类模板initializer_list的支持。该类中包含成员函数begin()和end()可以获得列表范围。除了用于构造函数外,initilazer_list还可以作为常规函数的参数。下面编写一个函数sum来求和,演示该模板类作为函数参数的使用。

#include<iostream>
#include<initializer_list>
using namespace std;

double sum(initializer_list<double> L){
	double tol = 0.0;
	for(auto p = L.begin(); p != L.end(); p++){
		tol += *p;
	}
	return tol;
}

int main(){
	double tol = sum({1.0, 2, 3, 4.5});
	cout << tol <<endl;
	return 0;
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#淡出淡入窗体发布时间:2022-07-13
下一篇:
用C#操作文件/文件夹(删除,复制,移动)发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap