如果一个函数返回一个int,它可以通过一个int值来赋值吗?我认为为函数赋值没有太大意义。
int f() {}
f() = 1;
我注意到,如果函数返回对 int 的引用,那就没问题了。它仅限于int吗?其他类型呢?或任何其他规则?
int& f() {}
f() = 1;
第一个函数返回一个整数值,即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; }
您正在返回对临时对象的引用,该引用在函数返回后不再有效。访问引用会调用未定义的行为。
它不仅限于 int,而且对于原始类型,这样做没有意义。上课时很有用
如果一个函数按值返回一个对象,那么即使函数调用是一个右值,赋值也是可能的。例如:
std::string("hello") = "world";
这会创建一个临时字符串对象,对其进行变异,然后立即销毁它。一个更实际的例子是:
some_function(++list.begin());
你不能写list.begin() + 1
,因为列表迭代器上不可能加法,但增量很好。这个例子不涉及赋值,但赋值只是更一般规则“成员函数可以在右值上调用”的一个特例。