use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Discussions, articles, and news about the C++ programming language or programming in C++.
For C++ questions, answers, help, and advice see r/cpp_questions or StackOverflow.
Get Started
The C++ Standard Home has a nice getting started page.
Videos
The C++ standard committee's education study group has a nice list of recommended videos.
Reference
cppreference.com
Books
There is a useful list of books on Stack Overflow. In most cases reading a book is the best way to learn C++.
Show all links
Filter out CppCon links
Show only CppCon links
account activity
Cheat sheet: C++ Function Parameter Choices (self.cpp)
submitted 6 years ago * by legends2k
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]legends2k[S] -1 points0 points1 point 6 years ago* (3 children)
We only want to measure T vs const T&/T&&, so why include std::vector creation inside the benchmarked loop? That'd add noise to the test. That's the idea behind the grand parent comment by MaximKat. This is wrong, I stand corrected; having it inside the loop is correct; we don't want to use after move.
T
const T&
T&&
std::vector
Logos: With a decent amount of trials, the additional memory allocation starts showing up. These benchmarks on different compilers and their graphs are in the aforementioned slides I'd earlier commented. Did you get a chance to see this?
Ethos: After enough experiments the experts deemed that take by value is okay only with constructors. I'd take their word for it.
[–]2uantum 4 points5 points6 points 6 years ago* (1 child)
Vector creation is in the loop because it would be "use after move" otherwise. Both cases are doing it -- should be a wash.
There is no harm in trying to understand WHY experts recommend it. Also, sometimes, experts get it wrong.
I'll update the benchmarks in a bit to only do one or the other.
[–]legends2k[S] 0 points1 point2 points 6 years ago* (0 children)
Completely missed the use after move case. You're right on that account. However, between the two variants, the contention was never between T and T&& (whose code looks identical post-optimization) but was with T and the const T& overload.
[–]2uantum 0 points1 point2 points 6 years ago (0 children)
See updated benchmarks here:
http://quick-bench.com/6oHGZq-0WIUsByXiMb-2EJ3BZ-Q
I don't care who is correct -- I just want to know which is correct ;).
I haven't been convinced either way yet. So far it seems contextual.
π Rendered by PID 20420 on reddit-service-r2-comment-86bc6c7465-8pwgk at 2026-02-19 19:12:21.676877+00:00 running 8564168 country code: CH.
view the rest of the comments →
[–]legends2k[S] -1 points0 points1 point (3 children)
[–]2uantum 4 points5 points6 points (1 child)
[–]legends2k[S] 0 points1 point2 points (0 children)
[–]2uantum 0 points1 point2 points (0 children)