C++使用和返回引用
C++ Using and returning References
查看以下函数:
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)));
以及为什么我不使用返回的值?
不清楚他们为什么不使用函数返回值,但你不必这样做。丢弃返回值是完全合法的。需要注意的一点是,相反的情况是不好的。如果你声明一个函数返回了一些东西,而你没有,那么这就是未定义的行为。
相关文章:
- 寿命延长从函数返回引用
- 了解C++如何返回引用并绑定到引用
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 从类返回引用向量
- 使用unique_ptr并返回引用,或者我应该使用shared_ptr并在需要时制作副本
- 混淆C++从函数返回引用
- 两个相同的重载运算符[]一个返回引用
- 为什么向量的.at()成员函数返回引用而不是迭代器
- C++使用和返回引用
- 返回 T 引用的 Const 函子禁止赋值
- 返回引用是否也会延长其生存期?
- 如何返回引用,然后递增迭代器
- 如果使用返回引用的函数初始化"auto"var,为什么它不声明引用类型?
- 我是否需要将 ref 与 make_pair 一起使用才能返回引用?
- 在 vector::at 返回引用后进行更改
- 为什么PyImport_ImportModule返回引用计数为 3 而不是 1 的 PyObject*
- 超出返回引用的单一实例生存期
- Boost.Python 返回引用现有 c++ 对象的 python 对象
- C++ 运算符 += 重载返回引用
- 如何声明接受转发引用并返回引用或副本的函数模板