区分综合引用(Universal reference)和右值引用

在C++中区分综合引用和右值引用可遵循以下原则

1. 变量或者参数的形式必须严格符合“T&&”的形式,并且T需要经过类型推导,是综合引用。


符合T&&的形式,且需要经过类型推导来判断T的类型,所以是综合引用。


理由同上,所以是个综合引用


Args的类型依赖于vector的T,每一次调用emplace_back时都需要根据T的类型来推导Args的类型,所以这是一个综合引用。

2. 如果变量或者参数的形式不是严格符合“T&&的形式,或者T不需要经过类型推导,那么 T&&是一个右值引用。

    std::vector<T>&& param 并不是T&&的形式,所以是右值引用。


    const T&& param 并不是T&&的形式,所以是右值引用


    push_back中的T&&, 并不需要经过类型推导,应为在vector被实例化之前,push_back函数是不存在的。

3. 如果一个综合引用和一个右值引用参数绑定,那么这个综合引用就会被初始化为右值引用,反之,如果一个综合引用被一个左值初始化,那么这个综合引用就变成为一个左值引用。

猜你喜欢

转载自blog.csdn.net/jxianxu/article/details/79508727