After testing this code:
#include <iostream>
#include <chrono>
#include <vector>
#include <string>
void x(std::vector<std::string>&& v){ }
void y(const std::vector<std::string>& v) { }
int main() {
    std::vector<std::string> v = {};
    auto tp = std::chrono::high_resolution_clock::now();
    for (int i = 0; i < 1000000000; ++i)
        x(std::move(v));
    auto t2 = std::chrono::high_resolution_clock::now();
    auto time = std::chrono::duration_cast<std::chrono::duration<double>>(t2 - tp);
    std::cout << "1- It took: "  << time.count() << " seconds\n";
    tp = std::chrono::high_resolution_clock::now();
    for (int i = 0; i < 1000000000; ++i)
        y(v);
    t2 = std::chrono::high_resolution_clock::now();
    time = std::chrono::duration_cast<std::chrono::duration<double>>(t2 - tp);
    std::cout << "2- It took: " << time.count() << " seconds\n";
    std::cin.get();
}
I get that using const-reference is actually ~15s faster than using move semantics, why is that? I thought that move semantics were faster, else, why would they add them? What did I get wrong about move semantics? thanks
 
    