c++11学习笔记

1.auto:自动转换类型,由编译器自动进行类型推导,从而替换为目标的变量名(如int)。
使用规则:使用auto时必须同时进行初始化,auto关键字不能用来声明一个数组,auto的应用主要是在一些复杂的变量类型前,如迭代器...。
2.decltype:类似于auto的替换功能,但用法不同,编译器推导时依赖表达式,举例:

int a = 0;
decltype(a) b = 1;  //b 被推导成了 int
decltype(10.8) x = 5.5;  //x 被推导成了 double
decltype(x + 100) y;  //y 被推导成了 double

该关键字有两种规则:1.根据函数返回值类型推导2.如果是由()或者为左值时推导为该类型的引用
3.nullptr:在开发时,初始化指针,避免产生野指针,一般会将指针初始化NULL,但原来的NULL只不过是宏定义为0,因此会产生某些问题,如:

 isnull(0); 
 isnull(NULL);//这两行代码是一样的,而如果使用nullptr可以解决这个问题

nullptr是nullptr_t类型的一个实例对象,nullptr_t是专门用于初始化指针的类。
4.using:使用typedef可以重新命名某些类型,但不能用于某些场合,如模板参数等,而using可以解决这些问题,两者用法上有区别:

typedef Uint unsigned int
using Uint=unsigned int

5.for循环:

for(int i:Arr)//无法修改数组值
for(int&i:Arr)//可以修改数组值

6.tuple:最大特点是:实例化的对象可以存储任意数量、任意类型的数据。tuple有以下初始化方式:

   tuple<int, char> A;                             // {}
   tuple<int, char> B(A);                     // 用A来初始化B
   tuple<int, char> C(std::make_tuple(0, 'c'));   // 使用make_tuple来初始化构造
   tuple<long, char> D(C);                    // 转化类型构造
   tuple<int, char> A(0, 'a');                    // 直接初始化为{0,'a'}
   tuple<int, char> A(std::make_pair(0, 'a'));    // 使用make_pair来初始化构造

具体用法:

tuple<int,char>mytuple(0,'a');//初始化
int size=tuple_size<decltype(mytuple)>::value;//使用decltype来表示mytuple的元素类型,计算元素个数
get<0>(mytuple);//获得mytuple中的元素,0表示第0个;
get<0>(mytuple)=0//可以直接将获得的元素修改
auto bar =make_tuple("a",1,1)//创建一个tuple对象
const char* s,double d,int i;
std::tie(s,std::ignore,i)=bar;//将bar进行拆分接收,而ignore表示占位,不接收
auto catch=tuple_cat(mytuple,bar)//将两个tuple对象整合到catch一个tuple对象中

7.lambda表达式(匿名函数):基本格式为外部变量服务方式mutable noexcept/throw()->返回类型{函数主体};匿名函数没有函数名,可以执行某些操作,外部变量访问方式有以下写法:

[=]值传递访问所有外部变量 
[&]引用传递访问所有外部变量
[val1,val2]值传递访问某些变量
[&val1,&val2]引用传递访问某些变量//其它就是这些的搭配

mutable:用于在值传递时,修改拷贝值时的修饰符,noexcept表示不抛出异常,而throw()表示可以抛出哪种类型异常,使用案例

sort(num,num+3,[=](int x,int y)->bool {return x<y})//在sort函数中定义比较方式
auto f=[=]()->{cout<<"this is a function";};//使用f来接收该函数,f类似于是函数名,可直接调用f()。
posted @ 2022-02-03 12:07  梦呓qwq  阅读(21)  评论(0编辑  收藏  举报