Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 右值和左值引用_C++_C++11 - Fatal编程技术网

C++ 右值和左值引用

C++ 右值和左值引用,c++,c++11,C++,C++11,我有一个函数printInt,如下所示 void printInt(const int& a) { cout<<a<<endl; } 它工作得很好。 但是当我将函数定义更改为 void printInt(int& a) { cout<<a<<endl; } 右值参考参数 void printInt(int& a) { cout<<a<<endl; } void prin

我有一个函数printInt,如下所示

void printInt(const int& a)
{
    cout<<a<<endl;
}
它工作得很好。 但是当我将函数定义更改为

void printInt(int& a)
{
    cout<<a<<endl;
}
  • 右值参考参数

    void printInt(int& a)
    {
        cout<<a<<endl;
    }
    
    void printInt(int&& a)
    {
        cout<<a<<endl;
    }    
    
    void printInt(int&&a)
    {
    
    cout
    const int&
    是一个左值引用。问题是语言指定它可以绑定到右值。
    int&
    也是一个左值引用,但它不能这样做。这就是为什么第一个版本可以工作,而第二个版本不能工作的原因。

    您可以将其视为一种机制来保存const的正确性。无需声明r参考const,您告诉编译器您可能正在对参数进行更改,但是修改temp-rvalue对象的含义是什么?语言禁止这样做。
    void printInt(int&& a)
    {
        cout<<a<<endl;
    }    
    
    void printInt(const int& a)
    {
        cout<<a<<endl;
    }