如果函数返回一个int,是否可以通过int值赋值?我认为为函数赋值是没有多大意义的。
int f() {}
f() = 1;
我注意到,如果函数返回对int的引用,那就没问题了。它仅限于int吗?其他类型怎么样?或任何其他规则?
int& f() {}
f() = 1;
答案 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上调用成员函数”。