C++的class本质上是值语义的,它在作为函数返回值时可能会造成不必要的拷贝
返回值优化(RVO)返回值优化是编译器对返回一个值语义对象时进行的优化,这有助于性能优化
假如我们有一个Foo类,它的定义如下所示
class Foo {
public:
Foo() {
cout << "...
阅读全文
初次遇到std::forward是在阅读std::make_shared源码时看到的,当时不少很能理解为什么这可以达到完美转发的目的。这里来总结一下。
引用折叠std::forward的出现是因为C++11右值语义的出现,而有时候我们需要写下面的代码进行参数的转发。
template<class T>
void foo(T&& arg) {
...
阅读全文
最近在写智能指针shared_ptr的实现,本以为是一个比较简单的轮子,但其实内部实现是比较复杂的,总的来说总共有以下几项。
内部数据结构的实现shared_ptr有两个私有成员,一个为指向对象指针,另一个为引用计数块的指针。
我刚开始以为内部只是一个指向对象指针和一个引用计数(比如size_t)的指针,其实内部构造并不是这么简单,智能指针shared_ptr需要满足下面几点。...
阅读全文
对象移动右值引用右值引用区别于普通引用,用两个&表示
返回左值引用的函数,连同赋值、下标、解引用和前置递增递减运算符返回左值
返回非引用的函数,连同算术、关系、位以及后置递增递减运算符都生成右值
我们不能将左值引用绑定到一个右值上,但可以使用const左...
阅读全文
向算法传递函数向排序算法传递二元谓词定义isSHorter方法
bool isShorter(const int &i,const int& j)
{
return ...
阅读全文