2014-10-08 1 views
2

Я не в привычке позволять другим делать свою домашнюю работу, но я уже был поставлен задачейИзменчивость тестирования для возвращения значения функции

«Построить небольшую программу, иллюстрирующую, что функция возвращает примитивное значение набранного возвращает неизменяемое значение rvalue, тогда как функция, возвращающая значение типа класса (например, строка), возвращает (изменяемое) значение r. "

Может кто-нибудь дать некоторые намеки об этом? Есть ли способ проверить изменчивость и как вы изменяете значение rvalue?

+1

Подумайте о способах изменения (a) примитивного типа и (b) типа класса. Затем напишите программу, которая пытается сделать это с результатом вызова функции. –

ответ

0

Помните, что obj += 42; является сокращением на obj.operator+=(42);. Функции-члены могут вызываться на rvalues ​​(кроме C++ 11 & -qualified для 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 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^