Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

What's not in the course #269

Open
bernhardmgruber opened this issue Sep 22, 2022 · 1 comment
Open

What's not in the course #269

bernhardmgruber opened this issue Sep 22, 2022 · 1 comment
Labels

Comments

@bernhardmgruber
Copy link
Contributor

bernhardmgruber commented Sep 22, 2022

This is intended as a meta issue to collect and track C++ constructs that are not yet part of the course. If we decide to add them, we will create new issues for them with more details and remove them here. In case we decided to not add them, we provide a reason here. Please edit the table below to add new content instead of commenting.

C++ feature What is this about? Reason if we don't want it
freestanding A mode of C++ for non-hosted programs (i.e. embedded systems)
the C++ memory model The theoretical model on which memory and concurrency is built
incomplete types Restrictions and use cases for declared-only types.
alignment alignas, alignof, overalignment, aligned allocation with new and align_val_t
unicode char8_t/char16_t/char32_t and their literals, u8string, wchar_t and why char is sometimes enough
conversion operator operator T() on a class
thread_local variables global for a thread
anonymous unions Union members inside structs which have no names
volatile Disables optimizations around e.g. a variable.
pragmas Discuss some important pragmas (e.g. unroll, pack, etc.)
[[attributes]] We have [[fallthrough]], but there are a lot more
package managers how to get external libraries via conan, vcpkg, spack, ...
typeid It is mentioned once around std::any, but not explained. Include std::typeindex here.
namespace aliases namespace stdx = std::experimental
ref qualifiers struct S { void f() && { ... }};
member pointers pointers to member functions and non-static data members
function pointers Pointers to functions and how to define their type
full template specialization we only have 1 example for partial specialization
function template specialization vs. overloading Why overloading is preferable to specialization. How SFINAE and requires help here.
template meta programming Type lists, type functions, template template parameters, algorithms on type lists, ...
bit fields struct S { int a : 4; int b : 28; };
type traits and named requirements trivially copyable, trivial, copy constructible, POD, standard layout, aggregate, etc.
std::bitset
std::deque
file IO probably std::fstream
all of <filesystem> how to handle paths, iterate directories, copy/delete files, etc.
IO manipulators std::endl, std::left, std::hex, etc.
std::stringstream
Lists std::list and std::forward_list. Why they are slow for many applications and when they are useful
Locals Changing language, formatting decimal points, etc. Which functions are affected? Why you cannot read back a text file on your en_US notebook, written on a de_AT system.
Associative containers std::set, std::multiset, std::unordered_set, std::map, std::multimap, std::unordered_map, std::flat_set, std::flat_map, ...
std::hash
std::queue
std::stack
std::pair and std::tuple
std::integer_sequence This connects to std::tuple and meta programming
Optimization utilities std::unreachable, [[likely]], etc.
std::valarray
std::array
<chrono> Basically all the header: clocks, dates, times, timezones, calendars, weekdays, etc.
std::regex
<system_error> All about error codes and handling platform specific errors
Allocators Discuss that many STL constructs can be augmented with allocators to change their allocation behavior
Memory resources All from std::pmr and <memory_resource>
Barriers and latches From <barrier> and <latch>
Bit and byte manipulation From <bit>, e.g. bit_cast, bit_ceil, rotl, endian, byteswap, ...
Math. constants from <numbers> We can use std::numbers::pi now instead of non-standard M_PI
<semaphore>
std::source_location As a replacement for __FILE__, __LINE__, etc.
std::expected Alternative to errorcode/exception based error handling. We mention it briefly around exceptions.
stack traces use std::stracktrace to get a stack trace. And you can print it.
floating points There are a lot of myths around floats and also IEEE 754. We could discuss a bit how the format works, INF, NAN, rounding modes, precision, comparison, fast-math, ...
iterators we mention them around the STL, but we never discuss their requirements, the iterator hierarchy, and some concepts behind them
memory order Atomic operations have a memory order and we don't talk about its semantics. Especially, that relaxed is faster than the default seq_consistent, and when we need acquire and release semantic.
deducing this Member functions with explicit object parameters
value categories We only discuss rvalue and lvalue, but not xvalue, glvalue and prvalue
@bernhardmgruber bernhardmgruber pinned this issue Sep 24, 2022
Copy link

stale bot commented Mar 4, 2024

This issue or pull request has been automatically marked as stale because it has not had recent activity. Please manually close it, if it is no longer relevant, or ask for help or support to help getting it unstuck. Let me bring this to the attention of @klieret @wdconinc @michmx for now.

@stale stale bot added the stale label Mar 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant