请问各位倒底什么是右值引用啊
如题,我写了一段代码,在VS2012下面编译完全没有问题,用gcc 4.7编译就出问题,我google了一下,说是从gcc4.3开始就已经支持右值引用了,我也在makefile里面申明了-std=c++11,但是还是报错,难道我写的不是右值引用?
dcMem.SelectObject(wxBitmap(*m_pImgBtnGroupBgRepeat));
编译器报错时提示:
/home/cyy/Downloads/wxWidgets-2.9.4/include/wx/dcmemory.h:30:10: note: void wxMemoryDC::SelectObject(wxBitmap&)
/home/cyy/Downloads/wxWidgets-2.9.4/include/wx/dcmemory.h:30:10: note: no known conversion for argument 1 from ‘wxBitmap’ to ‘wxBitmap&’
[解决办法]
你二楼的例子不能说明问题啊。
[解决办法]
临时对象是一种右值,T& 不能引用临时对象。
- C/C++ code
wxBitmap bitmap(*m_pImgBtnGroupBgRepeat);dcMem.SelectObject(bitmap);
[解决办法]
T& 只能引用左值。这里T为一个不带cv的类型。
- C/C++ code
int const & r = 1; // okint const & r = int(1); //OKint& r = 1; //errorint& r = int(1);//error
[解决办法]
这里没有用到右值引用(T&&)
[解决办法]
哎,楼主,找本合格的教材补课吧。
你连非const 的引用不能加在临时变量上,这个基础知识都还没掌握呢。
右值引用和你现在的问题几乎完全无关的,别瞎折腾了。