随笔分类 -  现代C++新特性总结

介绍下一些重要的现代C++新特性
摘要:Item 1:优先选用auto,而非显式类型声明 在C++11中,使用auto关键字可以将程序员从输入繁琐的类型中解放出来。 Example: //简化前的代码 void loopover(std::vector<std::string> &vs) { for (std::vector<std::s 阅读全文
posted @ 2020-09-19 17:28 心媛意码 阅读(583) 评论(0) 推荐(0) 编辑
摘要:相比于断言适用于排除逻辑上不可能存在的状态,异常通常是用于逻辑上可能发生的错误。 异常声明 Item 1:当函数不可能抛出异常或不能接受抛出异常时,使用noexcept 理由 如果不打算抛出异常的话,程序就会认为无法处理这种错误,并且应当尽早终止,如此可以有效地阻止异常的传播与扩散。 示例 //不可 阅读全文
posted @ 2020-08-26 19:46 心媛意码 阅读(217) 评论(0) 推荐(0) 编辑
摘要:1.问题现场 2.提问与答案 当[]为=时,报上述错误,而改为&时则OK.现在有个疑问,不是说用=是值传递的方式,为何n是一个不可修改的左值呢? = 默认是 const 不能修改的,需要加上mutable可以让n能够在函数体中发生改变,但main函数中n仍然还是0.因为mutable只是保证可以修改 阅读全文
posted @ 2020-06-06 17:27 心媛意码 阅读(292) 评论(0) 推荐(0) 编辑
摘要:今天跑步的时候,想起前一阵被问到的死锁问题还没有好好的看过,刚好简书上有一篇比较细致的文章,这里做下总结. 文章链接: https://www.jianshu.com/p/cab2fbc4b794 总结: 1.这里死锁产生的原因,线程t1等待t2释放mtB,而线程t2等待t1释放mtA. 2.死锁解 阅读全文
posted @ 2020-06-02 23:45 心媛意码 阅读(258) 评论(0) 推荐(0) 编辑
摘要:完美转发(perfect forwarding)问题是指函数模板在向其他函数传递参数时该如何保留该参数的左右值属性的问题。也就是说函数模板在向其他函数传递自身形参时,如果相应实参是左值,它就应该被转发为左值;同样如果相应实参是右值,它就应该被转发为右值。 这样做是为了保留在其他函数针对转发而来的参数 阅读全文
posted @ 2018-08-05 12:38 心媛意码 阅读(215) 评论(1) 推荐(0) 编辑
摘要:在C++11中,标准库在<utility>中提供了一个有用的函数std::move,这个函数的名字具有迷惑性,因为实际上std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而我们可以通过右值引用使用该值,以用于移动语义。从实现上讲,std::move基本等同于一个类型 阅读全文
posted @ 2018-08-05 12:37 心媛意码 阅读(322) 评论(0) 推荐(0) 编辑
摘要:Java中没有定义friend. friend用于声明类的友元,可以无视类中成员的属性。无论成员3p中的哪一种,友元类或友元函数都可以访问,破坏了封装性,此关键字备受争议。专家会建议程序员使用get/set接口来访问类的成员,但friend确实能少些很多代码。 C++11对friend关键字进行了改 阅读全文
posted @ 2018-08-05 12:37 心媛意码 阅读(249) 评论(0) 推荐(0) 编辑
摘要:C++中对象发生拷贝的场景可以分为两种,一种是被拷贝的对象还要继续使用,另一种是被拷贝的对象不再使用;第二种一般可以认为是对右值的拷贝,也就是一个临时对象; C++11中引入了移动构造函数,对象发生拷贝时不需要重新分配空间而是使用被拷贝对象的内存,即临时对象的内存,从而提高代码运行效率(作用); c 阅读全文
posted @ 2018-08-05 12:37 心媛意码 阅读(1315) 评论(0) 推荐(1) 编辑
摘要:常量表达式 Item 1:如果函数必须在编译期进行求值,就将其声明为 理由 需要用 来告诉编译器允许对其进行编译期求值。 示例 阶乘的例子: 上例中给出了constexpr函数fac()的定义,在f()中列举了几种调用fac()的情形。在这里,编译期间能够求值的前提是fac()要为constexpr 阅读全文
posted @ 2018-08-05 12:36 心媛意码 阅读(503) 评论(0) 推荐(0) 编辑
摘要:decltype类型声明 有时会遇到这样的情况:希望从表达式的类型推断出要定义的变量的类型,但不想用该表达式的值去初始化变量。为了满足这一需求,C++11引入了decltype,它的作用是选择并返回操作数的数据类型。在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。 再者,decl 阅读全文
posted @ 2018-07-29 22:01 心媛意码 阅读(308) 评论(0) 推荐(0) 编辑
摘要:auto类型 C++11中引入的auto主要用于类型推导。auto在C++98中“存储类型指示符”的语义,由于使用极少且多余,该语义从C++11开始被删除。 auto类型推导用于从初始化表达式中推断出变量的数据类型,通过此方法可以有效简化代码: Example: 上例中,auto能够自动推导出vs. 阅读全文
posted @ 2018-07-29 21:58 心媛意码 阅读(845) 评论(0) 推荐(0) 编辑
摘要:C++98中的智能指针通过一个模板类 来实现, 操作符返回的指针可以交由它来管理,程序员不用再显式的调用 ,这在一定程度上避免了堆内存忘记释放的问题; 不过 有一些缺点,比如拷贝时返回一个左值,不能调用delete[]等 。 C++11中废弃了 ,改用 等智能指针来自动回收堆分配对象,使内存管理更安 阅读全文
posted @ 2018-06-23 16:46 心媛意码 阅读(324) 评论(0) 推荐(0) 编辑
摘要:POD类型 POD全称Plain Old Data。通俗的讲,一个类或结构体通过二进制拷贝后还能保持其数据不变,那么它就是一个POD类型。 C++11将POD划分为两个基本概念的合集,即:平凡的和标准布局的。 平凡的定义 1. 有平凡的构造函数 2. 有平凡的拷贝构造函数 3. 有平凡的移动构造函数 阅读全文
posted @ 2018-06-01 15:06 心媛意码 阅读(465) 评论(0) 推荐(0) 编辑
摘要:条款1:理解模板类型推导 模板及调用的一般形式: template<typename T> void f(ParamType param); f(expr); //从expr来推导T和ParamType的类型 情况1:ParamType是个指针或引用,但不是个万能引用 推导规则: 1.若expr具有 阅读全文
posted @ 2018-06-01 10:53 心媛意码 阅读(254) 评论(0) 推荐(0) 编辑
摘要:非受限联合体 非受限联合体:C++98中并不是所有数据类型都能够成为union的数据成员,不允许联合体拥有非POD(Plain Old Data)、静态或引用类型的成员。 C++11中取消了联合体对于数据成员的限制,任何非引用类型都可以成为联合体的数据成员,成为非受限联合体。 Example: 本例 阅读全文
posted @ 2018-06-01 10:35 心媛意码 阅读(331) 评论(0) 推荐(0) 编辑
摘要:整型 相比于C++98,C++11整型的最大改变就是多了long long。C++11标准中的整型变量一共有8种类型: short int 有符号短整型,长度因平台而异,一般为16位,且限制长度不得大于int; unsigned short int 无符号短整型,长度因平台而异,一般为16位,且限制 阅读全文
posted @ 2018-06-01 10:10 心媛意码 阅读(1394) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示