私は、なぜ誰かが定数値参照をとる関数を書くのかを理解しようとしています。
以下のコード例では、const rvalue参照関数(「3」を返す)の目的は何ですか。また、オーバーロード解決では、constLValue参照関数よりもconstRvalueが優先されるのはなぜですか(「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;
}