Если у нас есть такое определение классаКак написать метод получения так, что он возвращает RValue
class BusDetails
{
private:
string m_busName;
public:
string BusName() const { return m_busName; }
};
как бы метод геттер быть изменен или используется, так что, используя возвращаемое значение как Lvalue бы дать ошибка компилятора?
Например, если я использую его как
int main(void)
{
BusDetails bus;
bus.BusName() = "abc"; // <--- This should give a compiler error
cout << bus.BusName() << endl;
return 0;
}
я не получаю ошибку компилятора, поэтому, очевидно, назначение работ, но результат, как ожидалось.
Update: такое поведение, как ожидается, со встроенным типов (то есть компилятор выдает ошибку в приведенной выше строке кода, если у меня есть int
как тип возвращаемого вместо string
).
Обратите внимание, что он возвращает значение rvalue, за исключением того, что 'operator =' on 'srd :: string' работает с rvalue слева, вы все равно можете назначить ему! – Yakk
@Yakk, не могли бы вы расширить свой комментарий в ответ, поскольку я думаю, что он действительно отвечает на мой вопрос и помогает объяснить какое-то интересное поведение. – mihai