Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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++_Reference - Fatal编程技术网

C++ C++;并返回一个引用

C++ C++;并返回一个引用,c++,reference,C++,Reference,有人能给我解释一下这两种功能的区别吗 int& test(int a) { return a; } 及 告诉我在函数的返回类型之后使用“&”运算符的目的是什么? 我们应该什么时候使用它,因为我以前很少看到它 有人能给我解释一下这两种功能的区别吗 第一个示例可能产生未定义的行为,因为返回的引用“指向”一个变量,该变量在函数末尾被销毁。这与的定义非常相似(几乎相同) 第二种情况是返回上述示例中变量的正常“正确”方式 告诉我在函数的返回类型之后使用“&”运算符的目的是什么 retu

有人能给我解释一下这两种功能的区别吗

int& test(int a)
{
    return a;
}

告诉我在函数的返回类型之后使用“&”运算符的目的是什么? 我们应该什么时候使用它,因为我以前很少看到它

有人能给我解释一下这两种功能的区别吗

第一个示例可能产生未定义的行为,因为返回的引用“指向”一个变量,该变量在函数末尾被销毁。这与的定义非常相似(几乎相同)

第二种情况是返回上述示例中变量的正常“正确”方式


告诉我在函数的返回类型之后使用“&”运算符的目的是什么

return语句中类型后面的
&
的目的是返回对该类型的引用


我们应该什么时候使用它,因为我以前很少看到它

通常,传递引用或返回引用有助于避免复制传递/返回的参数,这可能代价高昂

自C++11以来,有一种更好的方法来处理返回的大对象:

在其他情况下,它用于提供对类的内部成员的访问。这是
std::string::operator[]
的示例,例如:

char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
A a;
a.val() = 10;
int& test()
{
    int x;    
    return x;
}
它还可用于允许函数调用链。以下情况就是这种情况:

std::cout << 'H' << 'e' << 'l' << 'l' << 'o';

返回类型后的“&”运算符表示函数返回引用。这是有道理的,它可以像

class A{
public:
     int &val(){return _val;}
private:
     int _val;
};
优点是您可以读取和修改对象的状态。例如:

char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
A a;
a.val() = 10;
int& test()
{
    int x;    
    return x;
}
但在您的情况下,传递函数引用可能比返回函数更好:

void test(int &a)
{
    //do something with a
}
返回对函数本地对象的引用是不好的,例如:

char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
A a;
a.val() = 10;
int& test()
{
    int x;    
    return x;
}

因为test()函数之外不存在
x

由于变量范围的原因,第一个是危险的。如果要这样做,应将变量设为静态。

通常,由于此处显示的确切原因,您不希望将其用作返回类型。它不是“运算符”。只是
&
字符恰好与某些运算符中使用的字符相同。好的,谢谢大家,我从该链接中得到的最好结果是:“如果需要返回值,请返回值,不要担心任何”费用“。无论如何,谢谢您的帮助@@第一个方法用于返回给定变量的引用。它通常在传递参数时使用。这样,就可以将引用作为输入传递。第二种方法,只返回变量A的值,而不是引用。通过值传递变量和通过引用传递变量是有区别的。我不知道确切的方法来解释它应该是什么,因为我的英语不太好,但我想知道我们使用返回类型后的“目的”是什么。也许下面的例子并没有显示出确切的方式,这正是我所想的,对此表示抱歉。我只是想知道我们使用它的目的。感谢您的评论:D@dinhha471,看一看新的编辑。在我看来,尽管返回对int的引用可能是合法的“C”,正如上面有人指出的,函数返回对函数堆栈上变量的引用。所以,当您试图访问它时,可能会遇到访问冲突或SEGV。@Jeffrey:当我在C/C++库中看到一些函数时,我就想知道这一点。但在现实生活中,我从来没有用过它。你的解释太好了,我不能投你的票(因为我没有足够的声誉),谢谢你也谢谢你提到getter和setter,这很容易理解