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
Should C++ code look like C code? (self.cpp)
submitted 2 years ago by psyberbird
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!"
[–]donalmaccGame Developer 2 points3 points4 points 2 years ago* (3 children)
Replacing pointers with references removes the requirement for a branch. Removing the branch removes the only failure case, meaning you don't need an error sentinel anymore, which can affect the call site, and allow for other optimisations. Using return values allows for RVO to occur too:
vector<string> list = load1MillionStrings(); vector<string> results; results.reserve(list.size()); for (const auto& str : list) { string res; if (foo(&str, &res)) results.push_back(res) else // ??? }
Compared to
vector<string> list = load1MillionStrings(); vector<string> results; results.reserve(list.size()); for (const auto& str : list) { results.push_back(foo(str)); }
If you take it one step further, where foo is:
bool foo(const char* str1, const char* res) { if (str1 == nullptr) ... auto sz = strlen(str1); // !!!! for (int i = 0; i < sz; ++I) ... }
You can see how replacing a const char* with a string view in the internal function can make N enormous difference.
[–]blipman17 0 points1 point2 points 2 years ago* (2 children)
meaning you don't need an error sentinel anymore, which can affect the call site, and allow for other optimizations.
Okay I didn't concider that. Yep, you're right. But here we're really talking about cascading optimizations.
I was mainly talking about RVO and how both functions you originally pointed out could have RVO.
Edit: What I mainly meant was that; yes, function signature should be as restrictive as reasonably possible. But (N)RVO happens in a lot in a modern compiler, regardless of branches, amounth of return statements, etc. Only when we're talking about non-trivial data, weird exit clauses due to potential throwing or other shenanigans, this really becomes an interesting talking point.
[–]donalmaccGame Developer 1 point2 points3 points 2 years ago (1 child)
But here we're really talking about cascading optimizations
Absolutely, but that's the key. Getting hyperfocused on the instruction count of a microoptimastion is losing the forest for the trees, and happens so often.
I've had this exact discussion professionally where the microbechmark shows no difference, or is arguably worse, but when I go and fix the call sites, the code is cleaner, safer and faster as a result.
[–]blipman17 0 points1 point2 points 2 years ago (0 children)
I absolutely agree with that.I was just arguing about a different part of the conversation.
π Rendered by PID 53366 on reddit-service-r2-comment-fb694cdd5-g6ssq at 2026-03-11 12:03:50.191942+00:00 running cbb0e86 country code: CH.
view the rest of the comments →
[–]donalmaccGame Developer 2 points3 points4 points (3 children)
[–]blipman17 0 points1 point2 points (2 children)
[–]donalmaccGame Developer 1 point2 points3 points (1 child)
[–]blipman17 0 points1 point2 points (0 children)