Это не ссылка на ссылку; такого нет.
То, что вы видите, это C ++ 0x rvalue ссылка , обозначаемая двойными амперсандами, &&
. Это означает, что аргумент i
функции является временным, поэтому функции разрешено забивать свои данные, не вызывая проблем в вызывающем коде.
Пример:
void function(int &i); // A
void function(int &&i); // B
int foo();
int main() {
int x = foo();
function(x); // calls A
function(foo()); // calls B, because the return value is a temporary
}
Это редко полезно для простых int
s, но очень полезно, например, при определении конструкторов перемещения. Конструктор перемещения похож на конструктор копирования, за исключением того, что он может безопасно «украсть» внутренние данные из исходного объекта, потому что он временно прекратит свое существование после возврата конструктора перемещения.