pair.first是否返回对第一个值的引用?

key*_*ert 1 c++ reference standard-library std-pair

在C++标准库中,有一个名为pair的对象.Pair.first和Pair.second分别返回pair对象的第一个和第二个值.我想在条件下将第一个值递增一(我的对是一对).当我尝试这样做时,它正在抛出"需要1值".这可能是因为我不是通过引用传递值的某个地方,但它也可能是.first不会通过引用返回该对的第一个值.有谁知道它是否存在?

Pot*_*ter 6

first不是一个函数,它是一个对象本身,一个数据成员struct pair.对象的名称是左值,相当于引用.

"左值"是一个语言术语,表示可以在赋值的左侧,即可以为其赋值,或者在内存中有一个有意义的地址.

如果条件表达式的两个替代值都是相同类型的左值,则条件表达式的结果是左值.

例如,

pair< int, int > p;
flag? p.first : p.second = 34; // ok

flag? p.first : 3 = 15; // error: 3 is not an lvalue; 3 = 15 is nonsense

pair< int, short > q;
flag? q.first : q.second = 12; // error: different types
Run Code Online (Sandbox Code Playgroud)

注意,对于赋值的右侧,"左值"的反义词是"rvalue".这些术语来自C语言.

记住:表达式的左值是存储它的位置,右值是它的内容.这些表达中的哪一个有意义地决定了它的价值范畴.