声明一个右值引用,使用T&&
这种格式,但是这玩意并不是表面上看到的那么简单。
1 | void f(Widget&& param); // 右值引用 |
声明一个右值引用,使用T&&
这种格式,但是这玩意并不是表面上看到的那么简单。
1 | void f(Widget&& param); // 右值引用 |
当形参被声明为右值引用时,意味着传入的实参需要是右值引用,并且该参数是可移动的。既然目的如此明确,那么使用std::move
是正确的选择:
1 | class Widget { |
但如果形参被声明为通用引用时,则意味着实参有可能是右值引用,该参数有可能可被移动。那么对应的使用std::forward
是正确的选择:
1 | class Widget { |
使用constexpr
以让编译器来检查该值是否是常量表达式,降低程序员负担。
除非是需要修改容器元素的内容,否则在使用迭代器的时候,应该使用其const
版本,也就是指向const
类型元素的指针,以避免误操作。
简单来讲就是对于枚举类型,也需要将其存放于命名空间中,以避免枚举中元素对外部标识符的污染。
在 c 中,typedef
是我经常使用的别名语法。但在 cpp 中,using
才是更好的选择。
理解了 auto
的推导原则后,就需要认识到使用 auto
所带来的便利性和缺陷,才能正确的使用它。
在 c 中,通常使用NULL
表示一个空指针,但是在 cpp 中有更优的nullptr
可供选择。
理解 cpp 是如何进行类型推导的,这样在使用时才不会踩太多坑……