“万能引用”

"万能引用"是C++中通用引用(Universal Reference)的非官方称呼,这个名字来源于Scott Meyers在其著作《Effective Modern C++》中的称呼。万能引用/通用引用主要是在C++11及以后的版本中出现的一种新的引用类型。

在C++中,万能引用主要与模板和类型推断一起使用。其形式通常是:T&&。但这并不总是表示通用引用,它还可以表示右值引用。是否表示通用引用取决于T是否是待推导的。

template<typename T>
void foo(T&& arg) { // 这里的T&&是通用引用
    // ...
}

int main() {
    int x = 0;
    foo(x); // foo<int&>(int&), T被推导为int&,所以T&&变成int& &&,根据引用折叠规则,变为int&
    foo(5); // foo<int>(int&&), T被推导为int,所以T&&变成int&&
}

在上面的代码中,当foo函数以左值作为参数时,T被推导为左值引用;当foo函数以右值作为参数时,T被推导为它的原始类型。

这种特性使得函数可以以最优的方式处理参数,无论参数是左值还是右值。当参数是右值时,函数可以安全地移动它们;当参数是左值时,函数知道它必须复制或以其他方式避免修改它们。

这就是所谓的“万能引用”的核心概念:通过引用折叠和模板类型推断,C++函数可以自动适应左值和右值参数,提高代码的效率和灵活性。

全部评论

相关推荐

评论
2
2
分享

创作者周榜

更多
牛客网
牛客企业服务