Как назвать & ldquo; переместить? '& Amp; & Amp;' конструктор в базовом классе? в C ++ [дубликаты]

Вы можете использовать lookup , например

>>> i = pd.Series(['a', 'a', 'b', 'c', 'b'])
>>> df.lookup(i.index, i.values)
array([ 1,  4,  8, 12, 14])

, где i.index может отличаться от range(len(i)), если вы хотите.

2
задан peterk 16 January 2019 в 15:47
поделиться

1 ответ

В общем, пометка некоторой переменной как rvalue reference с && не означает, что она сохраняет этот статус при прохождении src дальше. Я имею в виду, в конце концов, переменная имеет имя в контексте конструктора и поэтому может, очевидно, использоваться как lvalue. На самом деле выражение src действительно является lvalue. src передается вашему конструктору как rvalue, потому что вызывающая сторона намеревалась интерпретировать его как таковой.

Теперь в вашем конструкторе переменная фактически названа, и использование этого имени приводит к выражению, которое необходимо явно пометить как rvalue reference, чтобы интерпретировать как таковое. В противном случае, это просто значение. Вот почему вы должны move снова его интерпретировать вызываемым абонентом (здесь MyMovingBase::ctor) как rvalue, содержимое которого может быть перемещено из исходного объекта.

1115 Поэтому комментарий Франсуа верен. Использование

Subclass(Subclass &&src) : MyMovingBase<SubClass>(std::move(src))

делает свое дело.

0
ответ дан IceFire 16 January 2019 в 15:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: