C++ 函数返回值的可变性测试

C++ 函数返回值的可变性测试,c++,immutability,mutable,C++,Immutability,Mutable,我没有让别人帮我做作业的习惯,但我的任务是 构造一个小程序,说明返回基元类型值的函数返回不可变的右值,而返回类类型值(例如字符串)的函数返回(可变的)右值 有人能给点提示吗?有没有办法测试可变性,以及如何修改右值?记住obj+=42是obj.operator+=(42)的简写形式。可以对右值调用成员函数(C++11&-用于l值的限定函数除外) 我会使用“可修改”和“不可修改”的术语,而不是“可变”和“不可变”,这可能会与mutable关键字混淆 // 3.10/p1 - A prvalue ("

我没有让别人帮我做作业的习惯,但我的任务是

构造一个小程序,说明返回基元类型值的函数返回不可变的右值,而返回类类型值(例如字符串)的函数返回(可变的)右值


有人能给点提示吗?有没有办法测试可变性,以及如何修改右值?

记住
obj+=42
obj.operator+=(42)的简写形式。可以对右值调用成员函数(C++11
&
-用于l值的限定函数除外)

我会使用“可修改”和“不可修改”的术语,而不是“可变”和“不可变”,这可能会与
mutable
关键字混淆

// 3.10/p1 - A prvalue ("pure" rvalue) is an rvalue that is not an xvalue. [ Example: The result of calling a function
// whose return type is not a reference is a prvalue. The value of a literal such as 12, 7.3e5, or true is
// also a prvalue. — end example ]

 struct obj {
     obj() : value(0) {}
     obj& operator+=(int val) {
         value = val; // Can modify the value representation
         return *this;
     }
     int value;
 };

int returnPrimitive() {
    return 42;
}

obj returnObject() {
    return obj();
}

int main()
{
   returnPrimitive() += 42; // error: rvalue expression is not assignable
   returnObject() += 42; // member functions can be called on rvalues
}

考虑修改(a)基元类型和(b)类类型的方法。然后编写一个程序,尝试对函数调用的结果执行此操作。