R值通过引用C ++传递给函数

时间:2017-07-05 18:02:38

标签: c++ function pass-by-reference rvalue-reference rvalue

我对下面的代码有疑问,正确地将r值参数传递给C ++中的函数。 为什么我们不能将r值对象Rect传递给函数Print(Rect&),而是将r值int传递给我们。

我知道我们可以使用Print(const int&)Print(int&&)。但主要的问题是为什么我自己的r值对象可以传递?

提前感谢您的解释。

#include <iostream>

struct Rect{
    uint32_t a, b;
    Rect(uint32_t a, uint32_t b): a(a), b(b){
        std::cout << "Rect constructor..." << std::endl;
    }
    ~Rect(){
        std::cout << "Rect destructor..." << std::endl;
    }
    Rect( const Rect& rhs ): a(rhs.a), b(rhs.b){
        std::cout << "Rect copy constructor..." << std::endl;
    }
};

void Print(Rect& r){
    std::cout << "a = " << r.a << ", b = " << r.b << std::endl;
}

void Print(int& a){
    std::cout << "a = " << a << std::endl;
}

int main(){
    Print( Rect( 2, 5 ) );

    Print( 5 );

    return 0;
}

0 个答案:

没有答案