2010-04-18 2 views
11

В моих приключениях, изучающих библиотеки boost, я сталкивался с сигнатурами функций, которые имеют параметры, которые являются ссылкой на ссылку на объект.Какова цель использования ссылки на ссылку в C++?

Пример:

void function(int && i); 

Какова цель/преимущество делать это таким образом, а не просто взять ссылку на объект? Я предполагаю, что есть один, если он находится в режиме boost.

ответ

18

Это не ссылка на ссылку; такой вещи нет.

Что вы видите, это C++ 0x rvalue reference, обозначаемый двойными амперсандами, &&. Это означает, что аргумент 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 с, но очень полезно при определении перемещение конструкторов, например. Конструктор перемещения похож на конструктор копирования, за исключением того, что он может безопасно «украсть» внутренние данные из исходного объекта, потому что он временный, который перестанет существовать после возврата конструктора перемещения.

+0

Ах, хорошо. Спасибо за уточнение. Как этот код в boost (1.42) прямо сейчас? Понятно, что в настоящее время boost для стандарта C++ 03. –

+2

@Silver: он воспользуется функциями некоторых компиляторов. Некоторые компиляторы поддерживают C++ 0x (бит), и если Boost хочет обнаружить и использовать это, он будет. – GManNickG

+1

@SilverSun: Boost использует условную компиляцию (#if и т. Д.) Для настройки того, что доступно для каждого компилятора. – 2010-04-18 20:31:30

3

Это не ссылка на ссылку. Это ссылка rvalue, которая является новой функцией, поддерживаемой предстоящим стандартом C++ 0x.

2

Что вы ищете, это ссылка на rvalue. Это новая функция языка C++ 0x. См. here или менее формальный here.

Первоначальное предложение можно найти here

Смежные вопросы