如果函数返回一个int,可以为它分配一个int吗?

时间:2010-02-07 13:27:53

标签: c++ function rvalue

如果函数返回一个int,是否可以通过int值赋值?我认为为函数赋值是没有多大意义的。

int f() {}

f() = 1;

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

int& f() {}

f() = 1;

4 个答案:

答案 0 :(得分:22)

第一个函数返回一个整数by-value,它是 r-value 。一般情况下,您无法分配r值。第二个f()返回一个整数的引用,这是一个l值 - 所以你可以赋值给它。

int a = 4, b = 5;

int& f() {return a;}

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

注意:您没有为函数赋值,只需指定其返回值即可。 请注意以下事项:

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

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

答案 1 :(得分:2)

答案 2 :(得分:1)

它不仅限于int,但对于原始类型,没有必要这样做。当你有课程时它很有用

答案 3 :(得分:0)

如果函数按值返回对象,则即使函数调用是右值,也可以进行赋值。例如:

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

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

some_function(++list.begin());

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