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)类类型的方法。然后编写一个程序,尝试对函数调用的结果执行此操作。