C++ 并返回引用

标签 c++ reference

<分区>

谁能给我解释一下这两个函数的区别:

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

int test(int a)
{
    return a;
}

然后告诉我当我们在函数的返回类型之后使用'&'运算符的目的是什么? 我们应该什么时候使用它,因为我以前很少见过它。

最佳答案

Can any one explain to me the difference between these two functions?

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

第二种情况是在上面指定的示例中返回变量的正常、“正确”的方式。


and tell me what the purpose when we use '&' operator after return type of a function?

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


When should we use it because I've rarely seen it before.

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

从 C++11 开始,有一种更好的方法来处理返回的大对象:move semantics .

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

char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;

它也可以用于允许函数调用链。这是以下情况:

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

例如。在上面的代码中,std::ostream::operator<<返回对自身的引用。

关于C++ 并返回引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19149803/

相关文章:

c++ - 如何更改以避免复制指针的内容

c++ - 从 OpenGL 切换到 GDI

c++ - 应用程序终止 C++ - 内存问题?

reference - Tableau 表格上的引用线

c++ - operator= 重载分数数学的双指针

wcf - 使用 WCF (.NET) 进行进程内通信设计

c++ - 如果另一个指针指向它的引用,为什么 const int 不会被编译器(通过符号表)优化?

c++ - 在visual studio中,在c++项目的项目属性中,引用窗口是什么?

mysql - 如何从选择 "as"中获取值

c++ - 虚拟继承是如何工作的