在C ++中,两次使用equals是什么意思?

时间:2019-03-05 22:47:51

标签: c++

如果这是重复的话,我深表歉意:搜索这个并不容易。

示例代码取自rtorrent

m_bindings[KEY_UP] = m_bindings['P' - '@'] = std::bind(&ElementDownloadList::receive_prev, this);

双重值设置是什么意思,如何解释这一说法?

3 个答案:

答案 0 :(得分:6)

从右边的等号到左边计算表达式。语句a = b = c可以重写a = (b = c)=操作的结果是分配的值。因此(b = c)的结果为c,使下一个操作等效于a = c

答案 1 :(得分:2)

这称为运算符链接。您正在做的是将右手operator =的返回值分配给左手operator =

这等同于做

m_bindings['P' - '@'] = std::bind(&ElementDownloadList::receive_prev, this);
m_bindings[KEY_UP] = m_bindings['P' - '@'];

但是可以为您节省一行代码。这也使您免于再次调用operator[],这可能会很昂贵。就个人而言,除非性能确实是一个问题,否则我将使用2行版本的代码使代码更易于阅读。

答案 2 :(得分:2)

这类似于x = y = 1,是y = 1x = y的简写。