8

如果一个函数返回一个int,它可以通过一个int值来赋值吗?我认为为函数赋值没有太大意义。

int f() {}

f() = 1;

我注意到,如果函数返回对 int 的引用,那就没问题了。它仅限于int吗?其他类型呢?或任何其他规则?

int& f() {}

f() = 1;
4

4 回答 4

22

第一个函数返回一个整数值,即r-value。通常,您不能分配给 r 值。第二个 f() 返回一个对整数的引用,它是一个左值 - 所以你可以分配给它。

int a = 4, b = 5;

int& f() {return a;}

...
f() = 6;
// a is 6 now

注意:你不给函数赋值,你只是赋值给它的返回值。请注意以下事项:

int& f() { int a = 4; return a; }

您正在返回对临时对象的引用,该引用在函数返回后不再有效。访问引用会调用未定义的行为。

于 2010-02-07T13:31:44.357 回答
2
于 2010-02-07T13:50:48.297 回答
1

它不仅限于 int,而且对于原始类型,这样做没有意义。上课时很有用

于 2010-02-07T13:31:20.457 回答
0

如果一个函数按值返回一个对象,那么即使函数调用是一个右值,赋值也是可能的。例如:

std::string("hello") = "world";

这会创建一个临时字符串对象,对其进行变异,然后立即销毁它。一个更实际的例子是:

some_function(++list.begin());

你不能写list.begin() + 1,因为列表迭代器上不可能加法,但增量很好。这个例子不涉及赋值,但赋值只是更一般规则“成员函数可以在右值上调用”的一个特例。

于 2010-02-07T14:12:01.903 回答