博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++11新特性
阅读量:7101 次
发布时间:2019-06-28

本文共 2511 字,大约阅读时间需要 8 分钟。

1、统一的初始化方法

int arr[3]{
1, 2, 3};vector
iv{
1, 2, 3};map
mp{
{
1, "a"}, {
2, "b"}};string str{
"Hello World"};int * p = new int[20]{
1,2,3};struct A {int i,j; A(int m,int n):i(m),j(n) { }};A func(int m,int n ) { return{m,n}; }int main() { A * pa = new A {
3,7}; }
统一的初始化方法

2、成员变量默认初始值

class B {public:int m = 1234;int n;};int main() {B b;cout << b.m << endl; //输出 1234return 0;}
成员变量默认初始值

3、auto 关键字

4、decltype关键字

求表达式的类型

int i;double t;struct A { double x; };const A* a = new A();decltype(a) x1; // x1 is A *decltype(i) x2; // x2 is intdecltype(a->x) x3; // x3 is doubledecltype((a->x)) x4 = t; // x4 is double&

5、智能指针shared_ptr

头文件<memory>

通过shared_ptr的构造函数,可以让shared_ptr对象托管一个new运算符返回的指针。

shared_ptr
ptr(new T); // T 可以是 int ,char, 类名等各种类型

此后ptr就可以像 T* 类型的指针一样来使用,即 *ptr 就是用new动态分配的那个对象,而且不必操心释放内存的事。

多个shared_ptr对象可以同时托管一个指针,系统会维护一个托管计数。当无shared_ptr托管该指针时,delete该指针。

shared_ptr对象不能托管指向动态分配的数组的指针,否则程序运行会出错。

6、空指针nullptr

7、基于范围的for循环

#include 
#include
using namespace std;struct A { int n; A(int i):n(i) { } };int main() { int ary[] = {
1,2,3,4,5}; for(int & e: ary) e*= 10; for(int e : ary) cout << e << ","; cout << endl; vector
st(ary,ary+5); for( auto & it: st) it.n *= 10; for( A it: st) cout << it.n << ","; return 0;}

8、右值引用和move语义

右值:一般来说,不能取地址的表达式就是右值, 能取地址的就是左值。主要目的是提高程序运行的效率,减少需要进行深拷贝的对象进行深拷贝的次数。

class A { };A & r = A(); // error , A()是无名变量,是右值A && r = A(); //ok, r 是右值引用

9、无序容器(哈希表)

头文件<unordered_map>

使用方法与map相同。哈希表插入和查询的时间复杂度几乎是常数。

10、正则表达式

头文件 <regex>

#include 
#include
//使用正则表达式须包含此文件using namespace std;int main(){ regex reg("b.?p.*k"); cout << regex_match("bopggk",reg) <

11、Lambda表达式

只使用一次的函数对象,不用专门为其写一个类。只调用一次的简单函数,在调用时再写函数体。

形式:

[外部变量访问方式说明符](参数表) ->返回值类型{    语句组}

[=] 以传值的形式使用所有外部变量

[] 不使用任何外部变量
[&] 以引用形式使用所有外部变量
[x, &y] x 以传值形式使用,y 以引用形式使用
[=,&x,&y] x,y 以引用形式使用,其余变量以传值形式使用
[&,x,y] x,y 以传值的形式使用,其余变量以引用形式使用

“->返回值类型”也可以没有, 没有则编译器自动判断返回值类型。

int main(){int x = 100,y=200,z=300;cout << [ ](double a,double b) { return a + b; } (1.2,2.5) << endl;auto ff = [=,&y,&z](int n) {cout <
<< endl;y++; z++;return n*n;};cout << ff(15) << endl;cout << y << "," << z << endl;}
Lambda实例
int a[4] = { 4,2,11,33};sort(a,a+4,[ ](int x,int y)->bool { return x%10 < y%10; });for_each(a,a+4,[ ](int x) {cout << x << " " ;} ) ;
Lambda实例&

转载于:https://www.cnblogs.com/zhuzhudong/p/10850521.html

你可能感兴趣的文章
eclipse常用插件在线安装地址或下载地址{转载自:旭龙 360doc}
查看>>
redis 客户端操作命令
查看>>
我的友情链接
查看>>
NO.12 禅道首页也改版了昂
查看>>
windows的磁盘操作之六——获取系统所在物理磁盘号
查看>>
linux 修改主机名
查看>>
7、OC —— set方法内存管理分析
查看>>
windows防火墙无法运行
查看>>
多核计算与并发编程(一) 架构篇
查看>>
OC测试错题。。。
查看>>
MAP/REDUCE:1,“先计算再汇总”;2,中间结果;3,全并行;
查看>>
PHP str_replace() 函数 第十一
查看>>
逻辑卷管理
查看>>
网络综合测试--4
查看>>
参考文档资源整理
查看>>
数据挖掘相关知识与工具总结
查看>>
我的友情链接
查看>>
解决:apache 整合redmine 启动报错 mod_passenger.so: failed
查看>>
MySQL主从设置
查看>>
Google首页电吉他Doodle源代码
查看>>