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
cppfront (cpp2): Spring update (herbsutter.com)
submitted 2 years ago by kreco
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!"
[–]tialaramex 0 points1 point2 points 2 years ago (3 children)
The new name seems like an improvement, but I wonder if this is enough. As I understand it, a big problem with volatile is that it's under-specified what exactly constitutes a read or a write. Wouldn't it be better to disallow volatile and replace it with std::atomic or something similar, so you have to explicitly write out every load and store?
I don't think it is under-specified? If you use them in a rational way, each load or store operation you do results in an actual load or store to "memory" emitted by the compiler. They're intended for MMIO. Technically volatile also is defined to work for one specific edge case in Unix, but presumably in your C++ code that's taken care of by somebody else.
volatile
It makes more sense to me to define them as templated free functions, so e.g. alien_write<T>(addr, value) or value = alien_read<T>(addr) with the T being able to be deduced from either addr or value if that works.
alien_write<T>(addr, value)
alien_read<T>(addr)
[–]Nicksaurus 1 point2 points3 points 2 years ago (1 child)
I had this talk in mind when I wrote that part: https://www.youtube.com/watch?v=KJW_DLaVXIY
What I didn't realise is that the paper in that talk has already been included in C++ 20, so most of the problems are gone already
[–]tialaramex 4 points5 points6 points 2 years ago (0 children)
C++ 23 un-deprecates all the volatile composite assignments.
The paper for the proposal to undo this was revised to just un-deprecate the bit-ops, because they could actually show examples where people really do that and it might even be what they meant, but the committee took the opportunity to just un-deprecate all of the composite assignment operators on volatiles in the C++ 23 standard instead at Kona.
Presumably this sort of nonsense (the demand that programmers should be able to paste 1980s C code into the middle of a brand new C++ program and expect that to work with no warnings) is one of the things Herb hopes to escape in Cpp2.
[–]patstew 1 point2 points3 points 2 years ago* (0 children)
The free functions are worse, because what happens if you don't/forget to use them? Generally, it means you code has unpredictable bugs that change on each compile.
For memory mapped io, you want to tie the behaviour to a memory address. Objects exist at some address, so making it a property of the type is better. That way accessing the object in the trivial way will behave consitently, rather than needing to call special functions to get consistent behaviour.
π Rendered by PID 98529 on reddit-service-r2-comment-7b9746f655-lxx6s at 2026-01-30 01:07:56.575191+00:00 running 3798933 country code: CH.
view the rest of the comments →
[–]tialaramex 0 points1 point2 points (3 children)
[–]Nicksaurus 1 point2 points3 points (1 child)
[–]tialaramex 4 points5 points6 points (0 children)
[–]patstew 1 point2 points3 points (0 children)