Shu Wang

Silence maks big money

(Effective Modern C++) – 第六章

Item 31: Avoid default capture modes.

默认捕获包括引用捕获和值捕获([&]和[=])。尽量避免直接使用默认的捕获模式:

  • 当使用引用捕获的时候,捕获的对象的可能被销毁(lambda表达式和对象的生命期不一样)。显式地指定捕获地对象同样会有问题。

Read more

(Effective Modern C++) – 第五章

Item 23: Understand std::move and std::forward.

变量即使他绑定的是个右值,他本身是一个左值的类型。

std::move无条件地将表达式转换为T&&。而std::forward不会更改表达式地类型(保持左右值地属性)转发给其他的参数。如果std::move(exp)地表达式exp是一个常量类型,那么const的限定是不会发生改变的。

Read more

(Effective Modern C++) – 第四章

智能指针:

Item 18: Use std::unique_ptr for exclusive-ownership resource management

std::unique_ptr<T>用于函数返回的指针这样由很多的好处:

Read more

(Effective Modern C++) – 第三章

Item 7: Distinguish between () and {} when creating objects.

花括号初始器{}可以指定对象的初始的值,而()则仅仅调用类的构造函数以此实例化对象。

  • 类内中不能定义成员但是可以指定成员的初始值。使用{}或=可以指定而()不行。

Read more

(Effective Modern C++) – 第二章

Item5:Prefer auto to explicit type declaration

建议使用auto的情况:

  • lambda表达式产生一个可调用的对象,但是与以往的可调用对象不同。不同的lambda表达式产生的可调用对象的类型是不一样的,即使他们的签名一致。一般的做法是使用functional头文件里的std::function函数适配器。但是有个问题就是std::function可能会随着运行而变慢变大。所以最好的办法就是使用auto接受可调用对象的参数。

Read more

(Effective Modern C++) – 第一章

Item 1:Understand template type deduction.

Case 1: ParamType is a Reference or Pointer, but not a Universal Reference

通用的引用的形式:const T&可以绑定到左值变量(T&)右值变量(T&&)。

Read more