今天买的《C++ Primer 第五版》到了,这一版本一个比较好的地方是。在开始的目录里面列出来了全书中涉及到的C++11新特性的地方,标明了页码,可以直接到对应的页面去看新特性的东西。...于是我对照书上的例子,写了一些简单的示例,用来大概的了解C++11的新特性,总结在这里,以后可以查查。
很多编程语言都有range for语法功能,自C++11起,终于将这个重要功能加入C++标准中。range for语句,可以方便的遍历给定序列中的每个元素并对其执行某种操作。...2.示例 vector vec{1,2,3}; //C++11 only,大括号初始化 for (int i : vec ) cout << i; 上面的操作时将vector数组中的元素拷贝至变量...如果想改变vector数组中的元素值,需要把循环变量i定义成引用类型,实现如下: vector vec{1,2,3}; //C++11 only,大括号初始化 for (auto& i :...121 144 169 196 225 256 289 324 361 ---- 参考资料 [1]C++ Primer中文版(第5版) [2]Range-based for loop (since C+...+11) [3]C++11 新特性之Range-based for loops
来说,带来了数量可观的变化, 其中包含了约 140 个新特性,以及对 C++98/03 中约 600 个缺陷修正,这就使得 C++11 更像是一次变革,变成了一种 “新的语言”(因为 C++11 中的部分操作显得很不...C++14、C++17、C++20 标准,最新的 C++23 也已经发布,新标准意味着新特性,是需要慢慢适应的,并且 C++14/17 也只是对 C++11 的修复和补充,所以我们着重学习 C++11...2022 进行 C++11 新标准的学习 注:C++11 中的新特性众多,本文以及后续文章只是列举常用语法 2.列表初始化 列表初始化 { } 是我们学习的第一个 C++11 新特性,这玩意其实我们在...可能有的人会说我们都是直接使用 { } 初始化的,没错,你使用的正是 列表初始化 这个新特性,只是你没有发现罢了 int main() { // C++11 之后 vector arr =...C++ 变得更加强大 C++11 的重磅更新为 右值引用和移动语义、lambda表达式、线程库、包装器等,限于篇幅原因,这些重磅更新将会放到后面的文章中详细讲解 总结 以上就是关于 C++11『基础新特性
C++11包括大量的新特性:包括lambda表达式,类型推导关键字auto、 decltype,和模板的大量改进。...类似的,手动编写的特殊成员函数的代码执行效率比编译器自动生成的特殊成员函数低。 C++11 标准引入了一个新特性:”=default”函数。...,C++11 标准引入了一个新特性:”=delete”函数。...实际上,C++11是通过引入一条所谓“引用折叠”(reference collapsing)的新语言规则,并结合新的模板推导规则来完成完美转发。...T && TR && T && *一旦定义中出现了左值引用,引用折叠总是优先将其折叠为左值引用* C++11中,std::forward可以保存参数的左值或右值特性: #include using
C++11引入了范围for循环,它是一种更简洁和易用的循环语法,用于遍历数组、容器类(例如 std::vector、std::list 等)或支持迭代器的类型。...范围for循环遍历数组的示例 int arr[] = {1, 2, 3, 4, 5}; for (int num : arr) { std::cout << num << " "; } //
最近开始使用C++11编码,编码效率和代码质量提升不少,把目前我遇到的提升效率和代码质量的新特性都总结一下。...(备注:这里不会列出所有的C++11新特性,只会列出我编码过程中实际用到的新特性) 一、auto关键字,这个关键字作用类似js里的var,可以自动判断变量类型。...的功能就完成了。 五、lambda函数,就是匿名函数,看各种介绍说很牛B的样子,不过目前我用的很少,应该是在foreach这类函数里用比较好。或者可以用来实现boost里scope_exit的特性。...六、chrono,stl里新提供了chrono类,这个类主要提供两个功能,时间点(timepoint)和时间段(duration)功能,由duration衍生出nanoseconds,microseconds...目前用到的主要就这六个地方,后续有觉得新的好特性再继续总结。
大家好,又见面了,我是全栈君 C++11之前没有对并发编程提供语言级别的支持,这使得我们在编写可移植的并发程序时,存在诸多的不便。...现在C++11增加了线程以及线程相关的类,很方便地支持了并发编程,使得编写的多线程程序的可移植性得到了很大的提高。 1....互斥量 C++11提供了以下4中语义的互斥量: std::mutex:独占互斥量,不能递归使用 std::timed_mutex:带超时的独占互斥量,不能递归使用 std::recursive_mutex...try_lock()尝试锁定互斥量,如果成功则返回true 2.2 递归的独占互斥量 需要注意的是尽量不要使用递归锁: (1)需要用到递归锁的多线程互斥处理本身就应该可以简化的,运行递归互斥很容易放纵复杂逻辑的产生...3.2 示例实现消息循环队列 3.2.1 实现代码 // 使用C++11的新特性实现线程安全的循环消息队列 #pragma once #include #include<mutex
但这样做其实是很tricky的方式,相当于利用c++的一些特性碰巧来实现,总感觉不是正确的方法。...C++11新定义了一个叫做move constructor的构造函数,签名方法如下: class_name(class_name &&); class_name& operator=(class_name...,move生成的新的实例和原先的实例是由同一个指针指向的,即实际上是同一个实例。...这就是这个新特性的简单介绍,感觉应用场合不是很多,可能是我还没搞懂的原因吧。 看了这篇博客,发现这个新特性还是很强大的啊~还是too young。...从这里看到,vs2012里面还不支持这个特性,vs2013才开始支持。在g++中,可以通过使用-std=c++11来启用这个特性(我用的是g++4.9.2,默认是开启的)。
C++程序员在编写代码的过程往往都会涉及到堆内存的开辟和释放,使用new和delete关键字。特别是内存的释放是通过程序员手动完成的,而不像栈内存只要生存周期结束即可由系统自动回收。...所在在实际的编码中,如果忘记手动释放内存或因其他一些细节原因而未进行堆内存的释放,最终导致产生大量的内存释放,造成资源浪费。...综上的三个例子,对于C++使用堆内存资源并造成内存泄漏的几率还是非常大的,即使你非常小心仔细的处理每一个可能会被泄漏的堆内存,也难免会出现一些问题。...智能指针 智能指针是一个类,它将裸指针(带*的指针)进行了封装,实现的指针的自动释放,它的高明之处就在于程序员只需要一次性的设计出一个具有良好功能的智能指针类,用它实例化出来的对象会自动对对象内存的堆资源进行管理...(3)*和->的重载函数是没有形式参数的。
大家好,又见面了,我是全栈君 C++11增加了unicode字面量的支持,可以通过L来定义宽字符:str::wstring str = L”中国人”; 将宽字符转换为窄字符串需要用到codecvt...库中的std::wstring_convert 例: #include "stdio.h" #include #include #include<iostream
很多人谈到c++,说它特别难,可能有一部分就是因为c++的内存管理吧,不像java那样有虚拟机动态的管理内存,在程序运行过程中可能就会出现内存泄漏,然而这种问题其实都可以通过c++11引入的智能指针来解决...c++11引入了三种智能指针: std::shared_ptr std::weak_ptr std::unique_ptr shared_ptr shared_ptr使用了引用计数,每一个shared_ptr...int main() { auto ptr = std::unique_ptr(new A); auto tptr = std::make_unique(); // error, c+...关于c++11的智能指针的使用就介绍到这里,大家有问题可以点此留言 ,我会尽快回复~ 参考资料 https://www.jianshu.com/p/b6ac02d406a0 https://juejin.im.../post/5dcaa857e51d457f7675360b#heading-16 《深入应用c++11:代码优化与工程级应用》
相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。...C++11增加的语法特性非常篇幅非常多,我们这里没办法一 一讲解,所以本节主要讲解实际中比较实用的语法。...SLT中的一些变化 新容器 用橘色圈起来是C++11中的一些几个新容器,但是实际最有用的是unordered_map和unordered_set。...右值引用和移动语义 5.1 左值引用和右值引用 传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。...可变模板参数 C++11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板,相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。
在C++11以后,形如这样的语法。 [capture](parameters)mutable ->return-type{statment}称为一个lambda表达式,表达一个匿名函数。...从编程的角度上看,lambda是一种函数式编程。 分析语法: 1.capture,可以通过值传递或者引用传递的方式给匿名函数提供访问父作用域上下文的变量。...特殊的两种情况:[=]和[&]分别表示,以值传递的形式捕捉所有父作用域的变量和以引用传递的形式捕捉所有父作用域的变量。 2.()参数列表形如一般的函数的参数列表。没有参数时可以忽略不写。...3.可选择项,mutable,->return type,分别表示去除匿名函数的常量性,->return type是匿名函数的返回值类型,可以忽略由编译器自动推导。添加可选项必须在此之前增加()。...#include using namespace std; //对()进行重载的函数,在调用()时与调用函数有着相似之处,但是是通过对象名称调用的 class Functor{
相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。...C++11增加的语法特性非常篇幅非常多,我们这里没办法一 一讲解,所以本期博客主要讲解实际中比较实用的语法。...具体参考:【C++】三大特性之多态_ ---- 六、STL中一些变化 用橘色圈起来是C++11中的一些几个新容器,但是实际最有用的是unordered_map和unordered_set。...---- 七、右值引用 1.右值引用和左值引用 传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。...---- 九、可变参数模版 C++11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板,相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进
之前在写c++的时候,我们想要依次迭代数组之中的元素,只能是用for循环来实现。当我学到python的时候,感受到了直接迭代元素的便捷性,真的是高呼Python真香哈哈哈哈。...现在发现,原来C++11里也添加了这样一个新的功能,真的很棒! 方法很简单,直接上代码!
类型别名模板 在传统 C++中,typedef 可以为类型定义一个新的名称,但是却没有办法为模板定义一个新的名称。因为,模板不是类型。...Lambda 表达式 Lambda 表达式,实际上就是提供了一个类似匿名函数的特性,而匿名函数则是在需要一个函数,但是又不想费力去命名一个函数的情况下去使用的。...第二行和第三行的参数则是右值,因为表达式产生的 string 对象是匿名对象,之后没有办法再使用了。 C++ 11 引入了一种新的机制叫做“右值引用”,以便我们通过重载直接使用右值参数。...表达式和持有调用函数返回的 auto_ptr 值类型的 make_triangle() 表达式之间一定有一些潜在的区别,每调用一次后者就会创建一个新的 auto_ptr 对象。...右值引用是针对右值的新的引用类型,语法是 X&&。以前的老的引用类型 X& 现在被称作左值引用。
, 但不能提供自定义类型对象的大括号初始化方式,也不能在使用new[]的时候初始化POD 数组。...幸好,C++11扩充了大括号初始化功能,弥补了C++03的不足。...+11提供的大括号初始化作为统一的初始化方式,既降低了记忆难度,也提高的代码的统一度。...此外,C++11中,类的数据成员在申明时可以直接赋予一个默认值: class C { private: int a=7; //C++11 only }; ---- 参考文献...[1]C++ 11 新特性
相比于 C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中 约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。...另外emplace还涉及模板的可变参数, 五、右值引用和移动语义 5.1 区分左值引用和右值引用 传统C++语法就有引用的概念,而在C++11之后新增了一个右值引用的语法特性,在我们区分左值和右值之前...由于上面的原因,在有些情况下一旦出现嵌套调用,但是我们并不希望改变他右值的特性。...七、可变参数模版 C++11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板,相比 C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进...同时还用到了C++11的另外一个特性——初始化列表,通过初始化列表来初始化一个变长数组, {(printarg(args), 0)...}将会展开成((printarg(arg1),0),(printarg
没有系统学过,所以这篇写的基本都是我接触过的,接触过多少就整理多少吧。 有些特性也不知道是不是新的,反正都是我新接触的,用的还挺顺手。...---- 语法层面 区间迭代range for 用过一次我就很喜欢这个特性了,写起来是方便了不少。...当然不是说用NULL有什么问题,不过新的规范都出来了,就用新规也没什么不好嘛。...C++11为了解决这个问题,提供了std::move()方法来将左值转换为右值,从而方便应用移动语义。move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转义,没有内存拷贝。...容器的emplace成员 emplace操作是C++11新特性,新引入的的三个成员emplace_front、emplace 和 emplace_back。
领取专属 10元无门槛券
手把手带您无忧上云