C++使用和返回引用

C++ Using and returning References

本文关键字:返回 引用 C++      更新时间:2023-10-16

查看以下函数:

std::string& foo (std::string& s)
{
s.erase(0.s.find_first_not_of(" ftvrn");
return s;
}

当传入一个字符串时,它确实修改了原始字符串,对吗?当您同时修改原始字符串时,为什么要返回修改后的字符串?

试图更好地理解为什么有人会用这种方式编码这个函数?有人确实这么做了,所以有人问我为什么只做以下事情:

std::string mystring = "    This is cool";
foo(mystring);
std::cout << mystring << std::endl;

为什么我没有利用返回的值?

当传入一个字符串时,它确实修改了原始字符串,对吗?

这是正确的。

试图更好地理解为什么有人会用这种方式编码这个函数?

它允许函数调用的链接。

在您的情况下,您可以使用:

std::cout << foo(mystring) << std::endl;

函数调用链接的一个示例是operator<<如何与std::cout一起使用。operator<<函数返回对ostream的引用。因此,您可以使用:

std::cout << foo(mystring) << std::endl;

否则,您将被迫使用:

std::cout << foo(mystring);
std::cout << std::endl;

为什么我没有使用返回的值。

该语言不会强制您使用返回的值。但是,您可以使用它,如上所示。

当传入一个字符串时,它确实修改了原始字符串,对吗?

正确。由于它是一个引用,因此它会从调用方修改对象。

在修改原始字符串的同时,为什么要返回修改后的字符串?

如果您想将调用链接在一起,那么您需要通过引用返回对象。如果你不这样做,你就不能使用

foo(foo(foo(some_string)));

以及为什么我不使用返回的值?

不清楚他们为什么不使用函数返回值,但你不必这样做。丢弃返回值是完全合法的。需要注意的一点是,相反的情况是不好的。如果你声明一个函数返回了一些东西,而你没有,那么这就是未定义的行为。