sorted(std::vector<std::string> names)
{
std::sort(names);
return names;
}
std::vector<std::string>
sorted2(std::vector<std::string> const& names) // names passed by reference
{
std::vector<std::string> r(names); // and explicitly copied
std::sort(r);
return r;
}
/*
...
Even if the actual argument to sorted2 is an rvalue, the source of the copy, names, is an lvalue,3 so the copy can’t be optimized away.
...
How is names in sorted2 an lvalue? But supposedly in sorted it isn't? What?
Source: http://c...content-available-to-author-only...t.com/archive/2009/08/want-speed-pass-by-value
Implications paragraph.
*/
CnNvcnRlZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbmFtZXMpCnsKICAgIHN0ZDo6c29ydChuYW1lcyk7CiAgICByZXR1cm4gbmFtZXM7Cn0KCgpzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gCnNvcnRlZDIoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBuYW1lcykgLy8gbmFtZXMgcGFzc2VkIGJ5IHJlZmVyZW5jZQp7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcihuYW1lcyk7ICAgICAgICAvLyBhbmQgZXhwbGljaXRseSBjb3BpZWQKICAgIHN0ZDo6c29ydChyKTsKICAgIHJldHVybiByOwp9CgoKLyoKLi4uCkV2ZW4gaWYgdGhlIGFjdHVhbCBhcmd1bWVudCB0byBzb3J0ZWQyIGlzIGFuIHJ2YWx1ZSwgdGhlIHNvdXJjZSBvZiB0aGUgY29weSwgbmFtZXMsIGlzIGFuIGx2YWx1ZSwzIHNvIHRoZSBjb3B5IGNhbuKAmXQgYmUgb3B0aW1pemVkIGF3YXkuCi4uLgoKSG93IGlzIG5hbWVzIGluIHNvcnRlZDIgYW4gbHZhbHVlPyBCdXQgc3VwcG9zZWRseSBpbiBzb3J0ZWQgaXQgaXNuJ3Q/IFdoYXQ/IAoKU291cmNlOiBodHRwOi8vYy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4udC5jb20vYXJjaGl2ZS8yMDA5LzA4L3dhbnQtc3BlZWQtcGFzcy1ieS12YWx1ZQpJbXBsaWNhdGlvbnMgcGFyYWdyYXBoLgoKCiov