C++11-新特性学习(1)------智能指针和迭代器相关

70 阅读1分钟

####C++ 11 语言特性

新特性说明
nullptr,autoNA
for-each区间迭代
shared_ptr unique_ptr智能指针
condtion_variable,mutex,lock语言级线程支持
map,set,multimap,multiset有序容器
unordered_map,unordered_set,unordered_multiset, unordered_multimap无序容器
list,forward_list链表
queue,stack队列,栈
array,vector容器
TBDlamda表达式

####nullptr介绍 nullptr 的出现是为了代替NULL,比如下面的两个重载的函数

void demoFunction(int t) {
	cout << "Run para as int" << endl;
}

void demoFunction(char* t) {
	cout << "Run para as char*" << endl;
}

如果调用demoFunction(NULL),某些编译将NULL定义为(void*)0,这就会产生歧义; 如果调用 demoFunction(nullptr) 就一定会调用到 demoFunction(char* t)

####auto类型推导,区间迭代 auto 可以推导任意基本类型,还可以作为函数的返回值;但是下面场景不能使用auto

  • 函数的参数不能使用auto
  • auto 不能推导出数组类型
//error auto Add(auto a, auto b)
auto Add(uint16_t a, uint16_t b) {
	return a + b;
}

auto index = 8;
auto str = "HelloWorld";
auto ret = Add(1, 2);
	
cout << "index:" << index << " str: " << str << " ret:" << ret << endl;
//auto array[] = {1,2,3,4} // error auto cannot as array

区间迭代可以用于容器类型,数组类型的遍历操作;可以大幅度简化代码 示例代码

	//basic usage
	for (uint8_t i = 0; i < sizeof(array)/sizeof(uint16_t); i++) {
		cout << "array[" << static_cast<int>(i) << "] = " << array[i] << endl;
	}
	for (auto t : array) {
		cout << t << endl;
	}
	for (auto &t : array) {
		cout << t << endl;
	}

###TBD