keep_simple

导航

2013年8月10日 #

关于C++11中的std::move和std::forward

摘要: std::move是一个用于提示优化的函数,过去的c++98中,由于无法将作为右值的临时变量从左值当中区别出来,所以程序运行时有大量临时变量白白的创建后又立刻销毁,其中又尤其是返回字符串std::string的函数存在最大的浪费。比如:1 std::string fileContent = “oldContent”;2 s = readFileContent(fileName);因为并不是所有情况下,C++编译器都能进行返回值优化,所以,向上面的例子中,往往会创建多个字符串。readFileContent如果没有内 部状态,那么,它的返回值多半是std::string(const std::s 阅读全文

posted @ 2013-08-10 16:34 keep_simple 阅读(1732) 评论(0) 推荐(0) 编辑

关于左值右值和左值引用右值引用

摘要: C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。 对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值。左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法是:看能不能对表达式取地址,如果能,则为左值,否则为右值。下面给出一些例子来进行说明。inta=10;intb=20;int*pFlag=&a;vectorvctTemp;vctTemp.push_back(1 阅读全文

posted @ 2013-08-10 16:27 keep_simple 阅读(952) 评论(0) 推荐(0) 编辑