3

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

4

2 回答 2

8

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

请注意,“左值”的反义词是“右值”,用于赋值的右侧。这些术语是从 C 语言中借来的。

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

于 2013-07-08T23:44:03.460 回答
1

对于初学者,我认为您所阅读的“需要 1 值”实际上是“需要左值”(L 值),它在 C++ 中是(直观地)表示实际对象而不是值的表达式.

接下来,pair.firstandpair.second不要产生对pair.firstand的引用pair.second而是. 您可以获得对它们的引用,但它们本身不是引用。firstsecondpair

但是,在没有看到实际代码的情况下,我无法提供任何更有针对性的建议。

希望这可以帮助!

于 2013-07-08T23:45:06.323 回答