我正在学习Lipman的C++入门第5版,我有一个问题.在那本书中写道:
如果从中获取成员的对象是左值,则点运算符产生左值; 否则结果是右值.
string x = "Hello World";
x.size() = 20; // I get an error saying that left-hand operand should be an l-
// value
Run Code Online (Sandbox Code Playgroud)
有谁能解释为什么?
"如果从中获取成员的对象是左值,则点运算符产生左值;否则结果为右值."
当成员是对象而不是函数时,这是相关的.
假设你有:
struct Foo
{
int a;
};
Foo bar() { return Foo{}; }
Run Code Online (Sandbox Code Playgroud)
并使用Foo和bar:
int main()
{
Foo f1; // f1 is an lvalue.
f1.a = 10; // Valid. f1 is an lvalue. Implies that f1.a is an lvalue.
bar(); // The object returned is not an lvalue.
bar().a = 20; // Not vaild since bar().a is not an lvalue.
}
Run Code Online (Sandbox Code Playgroud)
在你的情况下,
x.size() = 20;
Run Code Online (Sandbox Code Playgroud)
失败不是因为x不是左值,而是因为x.size()返回一个不是左值的对象.