对for、STL、异常和枚举的修改

C++11对类、模板和异常等方面的修改

基于范围的for循环

  1. C++11引入了基于范围的for循环,这种for循环对数组或容器中的每个元素执行指定的操作
int nums[5] = {1, 2, 3, 4, 5};
for(int x : nums)
	cout<<x<<" ";
for(int &x : nums)   //使用引用不会产生副本而是直接引用数组中的元素,
	x = x + 1;		 //因此可以修改元素值 
for(auto x : nums)
	cout<<x<<" ";    //将基于范围的for循环与auto结合

对STL的修改

  1. 增加了新的STL容器:C++11新增了array(固定长度的数组)、forward_list(单链表)、unordered_set、unordered_multiset、unordered_map、unordered_multimap
  2. C++11新增了rbegin()rend()方法,用于对容器进行反向遍历
	vector<int> nums{ 1, 2, 3, 4, 5 };
	for (auto iter = nums.begin(); iter != nums.end(); iter++)
		cout << *iter << " ";
	cout << endl;   // 1 2 3 4 5
	for (auto iter = nums.rbegin(); iter != nums.rend(); iter++)
	{
		cout << *iter << " ";
	}
	cout << endl;   // 5 4 3 2 1

在这里插入图片描述

  1. C++11新增了cbegin()cend()方法,类似于const int *常量指针,无法修改所指向的值
    在这里插入图片描述

  2. 在C++中要求,在声明嵌套模板时,用空格将尖括号隔开,防止与>>混淆,C++11不再要求这样

vector<list<int>>;  //在C++11中这么写对正确的

对异常的修改

  1. 异常规范:指出函数可能引发哪些异常
void func() throw (bad_dog);  //可能会引发bad_dog异常
void func() throw();  //不会引发异常
  1. C++11摒弃了异常规范,但增加了noexcept关键字,指出函数不会引发异常
void func() noexcept;   //指出不会引发异常

作用域内枚举

  1. C++11新增了一种称为作用域内枚举的枚举,使用structclass进行定义,解决同一作用域内两个枚举体,枚举成员不能重名的问题
  2. 作用域内枚举,其枚举量的作用域为类
enum old_egg {Small, Medium, Large, Jumbo};
enum t_shirt {Small, Medium, Large, Xlarge}; //两个枚举题发生了冲突
enum class egg {Small, Medium, Large, Jumbo};
enum struct t_shirt{Small, Medium, Large, Xlarge};  //不会发生冲突
  1. 某些情况下,常规的枚举会自动转为整型,但作用域内枚举不能隐式转为整型,提高了作用域内枚举的类型安全
int x = Medium;  //常规枚举,正确的
int x = egg::Medium;  //作用域内枚举,错误的,不能隐式转为整型

 t_shirt rolf = t_shirt::Medium;
 old_egg one = Medium;
 if(one <= Large)  //对于传统的枚举类型是正确的
 if(rolf <= t_shirt::Large)  //对于作用域内枚举是错误的,但在vs中测试是可以的
  1. 默认情况下,C++11作用域内枚举的底层类型为int
  2. C++ 11提供了一种语法,可用于选择不同的底层类型,但如果没有指定,编译器选择的底层类型将随实现而异
enum struct t_shirt:short{Small, Medium, Large, Xlarge}; //选择short作为底层类型 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_46427273

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值