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

时间:2013-07-08 23:42:00

标签: c++ reference standard-library std-pair

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

2 个答案:

答案 0 :(得分:6)

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

“Lvalue”是一个语言术语,表示可以在作业的左侧,即可以为其赋值,或者在内存中有一个有意义的地址。

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

例如,

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

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

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

答案 1 :(得分:1)

首先,我认为你所读到的“需要1值”实际上是“需要左值”(L值),它在C ++中是一个表达式(直观地)代表一个实际的对象,而不是一个值。

接下来,pair.firstpair.second不会引用对pair.firstpair.second的引用,而是 firstsecond内的pair个数据成员。您可以获取对它们的引用,但它们本身不是引用。

但是,如果没有看到实际的代码,我就无法提供更有针对性的建议。

希望这有帮助!