簡單介紹C++ 11新增加的8種新特性
阿新 • • 發佈:2019-01-22
今天看了一本英文書,簡單做了翻譯對於c++新特性經常用但卻不知道辨別,雖然c++17都已經出來了!一起學習吧!主要:初始化,auto、nullptr等//C++ 11 新特性
#include "stdafx.h"
#include <vector>
#include<list>
#include <set>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
//第一個 書寫格式
list<int> list1;
vector<list<int> > listw; //之前的
listw.push_back(list1);
vector < list<int>> list2; //C++11 支援種寫法
list2.push_back(list1);
//新增nullptr 代替NULL 0 void f(int);
void f(void *); f(0);
f(NULL); //有歧義不知道呼叫上面的哪一個函式
f(nullptr); //這個解決了這個問題呼叫f(void *) //添加了一個auto 的資料型別,支援自定義轉換資料型別
auto i = 42;
double f();
auto d = f(); //就自動的變為double型別 //auto i; //wrong 必須要初始化
static auto vat = 0.21; //新增字首也是准許的
//auto 在遞迴是的應用 vector<string> v;
auto pos = v.begin(); //pos = vector<string>::interaator 是不是方便多了
//在lambada 表示式中的應用 auto L = [](int x)->bool{ //具體的使用方法可以學習lambada表示式的使用
return x;
}; //c++11的初始化方式
int valures[] {1, 2, 4};
std::vector<int> v{ 2, 4, 56, 7, 78, 8, 9, 9 };
std::vector<string> s{ "monday", "tuesday" };
int x1(5.3);
int x2 = 5.3;
//int x3{ 5.3 };//ERROR 不被潤許
/// int x4 = {5.3}; error
char c{ 7 };//ok
//char c{ 999 }; //wrong out of char vector<int> v1{1, 3, 5, 6, 78, 8};
//vector<int> v2{23,345,5,4.4}; wrong 不准許型別不一致//對於迴圈for
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
//利用這種方式進行遍歷替換了迭代器
for(auto &delm: vec)
{
cout << delm << endl;
} //第二種bian遍歷
int array[] = { 1, 3, 4, 56, 7, 78 };
for(auto &x : array)
{
cout << x << endl; }
//最重要的改變
std::set<int> coll;
coll.insert(1);
coll.insert(move(1)); //注意這裡,在這裡建立物件不進行重新生成一次拷貝構造,而是掉用原來已有的!//keyword contexpr
contexpr int squre(int) //支援在編譯時期被檢測使用 return x*x;{} return 0;
}
#include "stdafx.h"
#include <vector>
#include<list>
#include <set>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
//第一個 書寫格式
list<int> list1;
vector<list<int> > listw; //之前的
listw.push_back(list1);
vector < list<int>> list2; //C++11 支援種寫法
list2.push_back(list1);
//新增nullptr 代替NULL 0 void f(int);
void f(void *); f(0);
f(NULL); //有歧義不知道呼叫上面的哪一個函式
f(nullptr); //這個解決了這個問題呼叫f(void *) //添加了一個auto 的資料型別,支援自定義轉換資料型別
auto i = 42;
double f();
auto d = f(); //就自動的變為double型別 //auto i; //wrong 必須要初始化
static auto vat = 0.21; //新增字首也是准許的
//auto 在遞迴是的應用 vector<string> v;
auto pos = v.begin(); //pos = vector<string>::interaator 是不是方便多了
//在lambada 表示式中的應用 auto L = [](int x)->bool{ //具體的使用方法可以學習lambada表示式的使用
return x;
}; //c++11的初始化方式
int valures[] {1, 2, 4};
std::vector<int> v{ 2, 4, 56, 7, 78, 8, 9, 9 };
std::vector<string> s{ "monday", "tuesday" };
int x1(5.3);
int x2 = 5.3;
//int x3{ 5.3 };//ERROR 不被潤許
/// int x4 = {5.3}; error
char c{ 7 };//ok
//char c{ 999 }; //wrong out of char vector<int> v1{1, 3, 5, 6, 78, 8};
//vector<int> v2{23,345,5,4.4}; wrong 不准許型別不一致//對於迴圈for
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
//利用這種方式進行遍歷替換了迭代器
for(auto &delm: vec)
{
cout << delm << endl;
} //第二種bian遍歷
int array[] = { 1, 3, 4, 56, 7, 78 };
for(auto &x : array)
{
cout << x << endl; }
//最重要的改變
std::set<int> coll;
coll.insert(1);
coll.insert(move(1)); //注意這裡,在這裡建立物件不進行重新生成一次拷貝構造,而是掉用原來已有的!//keyword contexpr
contexpr int squre(int) //支援在編譯時期被檢測使用 return x*x;{} return 0;
}