前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++11新特性概览

C++11新特性概览

作者头像
王云峰
发布2019-12-25 16:26:11
4180
发布2019-12-25 16:26:11
举报

今天买的《C++ Primer 第五版》到了,这一版本一个比较好的地方是。在开始的目录里面列出来了全书中涉及到的C++11新特性的地方,标明了页码,可以直接到对应的页面去看新特性的东西。于是我对照书上的例子,写了一些简单的示例,用来大概的了解C++11的新特性,总结在这里,以后可以查查。

代码语言:javascript
复制
#include <iostream>
#include <cstdlib>
#include <vector>
#include <array>
#include <iterator>
#include <functional>

using namespace std;

constexpr int size(){return 100;} // constexpr function, compiler will convert it to inline function 

void func(initializer_list<int> li) {
	cout << "func with " << li.size() << "elements" << endl;
}	

//
vector<int> func2() {
	return {1,2,3};
}


int main() {
	long long ll = 64; //long long: 64 bit at least

	//2. list initialization
	int a = {0};
	int bb{0};
	vector<int> v2 = {1,2,3};


	//3. nullptr, a new literal
	int *p = nullptr;
	//equals to 
	int *p2 = 0;
	int *p3 = NULL;// must include <cstdlib> first

	//4. constexpr
	constexpr int ci = 30;
	constexpr float cf = ci * 0.2;
	constexpr int sz = size(); // it's ok to initialize a constexpr value using constexpr function

	//5. alias declaration
	using my_int = int;
	my_int i = 10;

	using vi = vector<int>;
	vi v = {1,2,3,5};

	using it = vector<int>::iterator;
	for (it it_i = v.begin(); it_i != v.end(); ++it_i) {
		cout << *it_i << endl;
	}


	//6. auto
	auto aa = 3; // compiler will infer that a's type is int

	//7.decltype
	decltype(i) id1 = 0; // id1 has the same type with i
	decltype((i)) id2 = id1; // NOTE: (var) returns reference! so id2 is a reference to id1

	//7. in-class initializer 
	/*
	struct my_struct {
		int i = 0;
		int b = 2;
		string s;
	};
	*/

	//8. range for
	string hello = "hello, world!";
	for (auto c : hello) {
		cout << c << endl;
	}

	//9. vector of vector, no space anymore!
	//before:
	vector<vector<int> > vv1; 
	//now:
	vector<vector<int>> vv2;

	//10. cbegin, cend, return const_iterator don't care if container is const
	vector<int> vi10 = {4,4,54};
	const vector<int> cvi10 = {4,4,54};
	auto it10 = vi10.cbegin(); // it10: const_iterator type
	auto cit10 = cvi10.cbegin(); // cit10: const_iterator type

	//11. begin and end of pointer, included in <iterator>
	int ia[] = {1,3,4};
	int *b = begin(ia);
	int *e = end(ia);
	
	//12. initializer_list
	func({1,2,3,4});

	//13. trailing return type
	/*
	auto func(int i) -> int(*)[10];
	*/

	//14. =default: don't replace default initializer function
	/*
	class A {
		public:
		A() = default;
	};
	*/

	//15. delegating constructor
	/*
	class A {
	  public:
		A(int i, float f, double d):ii(i), ff(f), dd(d) {}
		A(int i, float f): A(i, f, 0) {}
		A(int i): A(i, 0, 0) {}

	  private:
		int ii;
		float ff;
		double dd;
	};
	*/
	
	//16. array 
	array<int, 3> a1 = {{1,2,3}};
	auto aa1 = a1.begin();
	
	//17.forward_list

	//18. emplace

	//19. shrink_to_fit

	//20. to_string
	int i20 = 233;
	string s20 = to_string(i20);

	//21. lambda 
	auto f211 = [] () {return 23;};
	auto f212 = [i20]() {return i20 > 20;};
	auto f213 = [i20]() -> int {if(i20> 20) return 1; else return 0;};

	//22. bind, included in <functional>
	/*
	int f(int a, int b) {
		return a>b ? a : b;
	}

	auto g = bind(f, _1, 10);
	*/
	
	//23. unordered associative container, managed by hash
	//including unordered_map, unordered_set, unordered_multimap, unordered_multiset

	//24. smart pointer,including shared_ptr, unique_ptr, weak_ptr

	//25. rvalue reference
	int i25 = 42; 
	int && rr = i25*42;

	//ERROR: variable is lvalue
	//int &&rr2 = rr;

	//26. std::move
	int &&rr3 = std::move(rr);

	//27. noexcept,use for moving copy or moving operator

	//28. reference qualifier
	/*
	class A{
	  public:
	  	A sorted() &&; //rvalue reference
		A sorted() &; //lvalue reference
	};
	*/

	//29. function template, included in <functional>
	//function<int(int, int)> f1 = add; //add is a function declared before

	//30. explicit conversion operator
	/*
	class A {
		explicit operator int() const {return val;};
	};
	*/
	
	//31. final to prevent inherit
	class Last final {}; // Last can't be a basic class

	//32.override: override virtual functions in parents class

	//33. tuple
	tuple<int, int, int> tt{1,2,4};
	auto tt1 = get<0>(tt);
	auto tt2 = get<1>(tt);
	auto tt3 = get<2>(tt);


	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档