c++ 11 一些新特性

1.新类型

c++11新增了long long 和 unsigned long long 以支持64位(或更宽)的整形;新增了类型 char16_t 和 char32_t , 以支持16位 和 32位的字符表示。

2.统一的初始化

c++11扩大了用大括号括起的列表(初始化列表)的适用范围, 使其可用于所有内置类型和用户定义的类型(即类对象),使用初始化列表时,可添加符号(=),也可不添加。

  如: int x = {5}; 

short quar[5] {4, 5, 2, 76, 1};

  初始化语法还可以用于new表达式中:

int* ar = new int[4] {2,4,6,7};   //c++11

创建对象时,也可以使用大括号(而不是圆括号) 括起的列表来调用构造函数:

#include <iostream>
class A
{	
	public:
	  A(int m, int n) : m_(m), n_(n) {};
	  void print() 
	  {
		std::cout<<"m_: "<<m_<<" n: "<<n_<<std::endl;
	  }
	private:
	  int m_;
	  int n_;
};
int main()
{
	A p(1,2); //old style
        A q{3,4}; //c++11
	A r = {5,6}; //c++11
	p.print();
	q.print();
	r.print();

	return 0;


}

注意使用g++编译的时候要加上 -std=c++11  。



3. std::initializer_list

c++11提供了模板类initializer_list, 可将其用作构造函数的参数。 如果类有接受initializer_list作为参数的构造函数, 则初始化列表语法就只能用于该构造函数。 列表中的元素必须是同一种类型或可转换为同一种类型。 STL容器提供了将initializer_list作为参数的构造函数:

vector<int> a1(10);  //uninitializerd vector with 10 elements

vector<int> a2{10}; //initializer-list, a2 has 1 element set to  10

vector<int> a3{4,6,1} //3 elements set to  4,6,1

头文件initializer_list提供了对模板类initializer_list的支持。 这个类包含成员函数begin() 和 end(), 可用于获悉列表的范围。 除用于构造函数外,还可将initializer_list用作常规函数的参数:

#include <initializer_list>
#include <iostream>
double sum(std::initializer_list<double> i1);
int main()
{
    double total = sum({2.5, 3.1, 4});
    std::cout << total << std::endl;
}

double sum(std::initializer_list<double> i1) 
{
    double tot = 0;
    for (auto p = i1.begin(); p!=i1.end(); p++)
    {   
        tot += *p; 
    }   
    return tot;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值