MST

星途 面试题库

面试题:C++ 右值引用兼容性之函数参数传递

在C++ 中,假设有一个函数 `void func(std::vector<int>&& vec)`,现在有一个 `std::vector<int> v{1, 2, 3}`,如何将 `v` 传递给 `func` 函数且能正确利用右值引用特性?请写出代码并解释原理。
28.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <vector>

void func(std::vector<int>&& vec) {
    // 这里可以对vec进行操作,vec是右值引用
    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
}

int main() {
    std::vector<int> v{1, 2, 3};
    func(std::move(v)); 
    // 原理:std::move本质上是将左值转换为右值引用。
    // v本身是左值,通过std::move(v)将其转换为右值引用,
    // 这样就能正确匹配func函数的参数std::vector<int>&&,
    // 从而实现资源的移动语义,避免不必要的拷贝。
    return 0;
}