Item26 Avoid overloading on universal references

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 在正式进入本文主题之前先来看一段代码,这段代码的目的是纪录下当前的日期和时间,并纪录一下名字到全局的数据结构中,代码如下:std::multiset names; void logAndAdd(const...
阅读(587) 评论(0)

Item25 Use std::move on rvalue reference, std::forward on universal references

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 右值引用只能绑定到那些可以移动的对象上,如果你有一个右值引用的参数,你应该知道这个参数是用来接收可以移动的对象的。而一个通用引用既可以绑定到一个右值,也可以绑定到一个左值。然后std::forward则可以根据传入的值的类型进行有...
阅读(544) 评论(0)

都是静态函数惹的祸

​ 关于静态函数我相信大家一定不会陌生,在项目中多多少少也会去使用,静态函数的典型应用场景莫过于限制函数的作用域只在本文件中,在我见过的项目中通常开发人员会把一些辅助函数放在头文件中,然后直接包含到项目中,如果不用static修饰会导致函数重定义(这其实很不规范,偷懒的把文件的声明和定义都放到了头文件中,正规的做法应该是声明放在头文件中,定义放在实现文件中)。// static.h #ifnde...
阅读(277) 评论(0)

Item24 Distinguish universal references from rvalues reference

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 刚接触C++11的移动语义的时候,认为T&&就是右值引用,在随后阅读文献的时候发现了另外一个名字,通用引用(universal references),起初认为这两者是同一个东西,直到今天才知道两者不是一个东西,只是形式上相同而已...
阅读(339) 评论(0)

Item23 Understand std::move and std::forward

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ std::move和std::forward并不像它们的名字那样有用,这两个仅仅是一个模版函数,是在C++11中引入的,辅助移动语义的,std::move并不是真正的移动了数据,而std::forward也不是真正的进行了转发。为...
阅读(406) 评论(0)
    个人资料
    • 访问:92953次
    • 积分:2039
    • 等级:
    • 排名:千里之外
    • 原创:111篇
    • 转载:0篇
    • 译文:1篇
    • 评论:24条
    博客专栏
    最新评论