stl 右引用

右值

int a=10;
int b=10;
int c=a+b;

左值往往代存储空间
右值: a+b 仅在运行过程中存在

__asm{
  mov eax,a
  mov ebx,b
  add eax,ebx
  mov c,eax
}

右值a+b 在操作完之后就销毁了,匿名无固定地址。

右值引用

int a =10, b=20;
const int& i = a+b;
int&& right=a+b; //通过 &&进行右值引用,使得右值持久化
cout<< right << endl;
cout<< ++right;
临时资源无需拷贝

   //  移动构造(转移资源)
    BetterString(BetterString&& other) {
        data = other.data;       // “偷”指针
        other.data = nullptr;    // 防止 other 析构时 delete
    }

模板参数类型推导

解决临时对象效率问题

/*
std::move:
T&& move(T& val)
返回参数的右值引用
*/
template<typename T>
void fwd(T&& x) {
    foo(std::forward<T>(x));  // 完美转发
}

int main() {
    int a = 10;
    fwd(a);        // 调用 foo(int&) —— 保留左值
    fwd(42);       // 调用 foo(int&&) —— 保留右值
    fwd( std::move(a) );  // 实参类型:int&&(右值)
}

posted @ 2026-02-07 22:06  fangshuo  阅读(7)  评论(0)    收藏  举报