C ++ 0x const Ссылка RValue в качестве параметра функции

Я пытаюсь понять, почему кто-то может написать функцию, которая принимает ссылку на константу rvalue .

В приведенном ниже примере кода для чего предназначена функция ссылки на константу rvalue (возврат " 3 "). И почему разрешение перегрузки отдает предпочтение константе Rvalue над ссылочной функцией const LValue (возвращающей "2").

#include <string>
#include <vector>
#include <iostream>

std::vector<std::string> createVector() { return std::vector<std::string>(); } 

//takes movable rvalue
void func(std::vector<std::string> &&p) { std::cout << "1"; }

//takes const lvalue
void func(const std::vector<std::string> &p)  { std::cout << "2"; }

//takes const rvalue???
//what is the point of const rvalue? if const I assume it is not movable?
void func(const std::vector<std::string> &&p) { std::cout << "3"; }

int main()
{
    func(createVector());
    return 0;
}
27
задан MW_dev 12 November 2012 в 02:12
поделиться