Item 31: Avoid default capture modes. 默认捕获包括引用捕获和值捕获([&]和[=])。尽量避免直接使用默认的捕获模式: 当使用引用捕获的时候,捕获的对象的可能被销毁(lambda表达式和对象的生命期不一样)。显式地指定捕获地对象同样会有问题。 void addDivi...

 2017年7月27日 -  739次阅读 -  0条评论

Item 23: Understand std::move and std::forward. 变量即使他绑定的是个右值,他本身是一个左值的类型。 std::move无条件地将表达式转换为T&&。而std::forward不会更改表达式地类型(保持左右值地属性)转发给其他的参数。如果std::move(exp)地表达式exp是一个常...

 2017年7月12日 -  541次阅读 -  0条评论

智能指针: Item 18: Use std::unique_ptr for exclusive-ownership resource management std::unique_ptr<T>用于函数返回的指针这样由很多的好处: #include <iostream> #include <iostream> #include <memory> class widget { public: }...

 2017年7月4日 -  539次阅读 -  0条评论

Item 7: Distinguish between () and {} when creating objects. 花括号初始器{}可以指定对象的初始的值,而()则仅仅调用类的构造函数以此实例化对象。 类内中不能定义成员但是可以指定成员的初始值。使用{}或=可以指定而()不行。 class Widget { … private: ...

 2017年6月27日 -  607次阅读 -  0条评论

Item5:Prefer auto to explicit type declaration 建议使用auto的情况: lambda表达式产生一个可调用的对象,但是与以往的可调用对象不同。不同的lambda表达式产生的可调用对象的类型是不一样的,即使他们的签名一致。一般的做法是使用functional头文件里的std::functio...

 2017年6月24日 -  417次阅读 -  0条评论

Item 1:Understand template type deduction. Case 1: ParamType is a Reference or Pointer, but not a Universal Reference 通用的引用的形式:const T&可以绑定到左值变量(T&)和右值变量(T&&)。 ref-模板的定义 template<typename T&g...

 2017年6月24日 -  515次阅读 -  0条评论