C++ 11之 && 右值引用
2015-07-03 15:10
363 查看
最近在看cocos2dx的源代码,发现了一个模板类有一个奇怪的语法&&:
inline RefPtr(RefPtr<T> && other) { _ptr = other._ptr; other._ptr = nullptr; }
刚开始一阵犯晕,一个类型Ref<T>和一个似乎是形参的other与操作会得出一个什么?显然这种理解是错误的。。 “&&”还有一种含义是右值引用,表示形参是一个右值。 **左值 右值:** int a = 0; a是一个左值,左值是一个变量,可以被引用和多次使用。0是一个右值,不可以被引用。 左值一般是非临时变量,可以多次使用。右值只在当前表达式有效。 看一下右值引用的用法:
class MyClassB { public: void init(int & intval) { cout<<"use & print"<<endl;}; void init(int &&intval) { cout<<"use && print"<<endl;} };
int main(void) { int ae = 10; MyClassB().init(10); MyClassB().init(ae); return 0; }
可以看出,传入不同类型的值,编译器自动识别调用了不同的函数。
右值引用是用来支持转移语义的。转移语义可以将资源 ( 堆,系统对象等 ) 从一个对象转移到另一个对象,这样能够减少不必要的临时对象的创建、拷贝以及销毁,能够大幅度提高 C++ 应用程序的性能。临时对象的维护 ( 创建和销毁 ) 对性能有严重影响。
相关文章推荐
- C++ 0x之右值引用
- C++11中的右值引用
- C++11右值引用自写测试例子
- c++ 右值引用
- 关于C++的右值、const引用、右值引用、const成员函数及相关扩展
- C++11新特性(1) 右值引用
- C++11 新特性(2) 移动语义
- C++ - 左值(lvalue)引用和右值(rvalue)引用 的 区别
- C++ primer阅读心得(第十三章)
- C++11中的右值引用
- C++ 右值引用
- 杂货边角(17):C++11的右值引用和移动语义
- c++ 右值引用
- C++随笔之对象移动
- 右值引用
- C++基础学习之5 - 认识C11新特征
- Rvalue Reference In Cxx11
- 右值引用、左值引用、指针、RVO优化
- c++中的左值与右值
- C++11——右值引用