0x342 C++
Will mainly follow Bjarne Stroustrup's book's structure
1. Abstraction
1.1. Construction, Cleanup, Copy and Move
class X {
X(Sometype); // ‘‘ordinary constructor’’: create an object
X(); // default constructor
X(const X&); // copy constructor
X(X&&); // move constructor
X& operator=(const X&); // copy assignment: clean up target and copy
X& operator=(X&&); // move assignment: clean up target and move
˜X(); // destructor: clean up
};
Destructor is invoked implicitly upon scope exit or by delete. Destructor can also be virtual since an object can be manipulated through its base interface and get deleted through that interface. A virtual destructor make sure that the derived class destructor get called.
2. Standard Library
2.1. IO
2.1.1. iostream
the only way to pass or return stream is by non-const reference
- stream cannot be copyied or assigned
- stream might change state (so non-const)
istream& read(istream& is, int hogehoge);
each stream has a iostate
, which indicates the state of the current stream, it can be
- good: valid state
- eof: get eof
- fail: recoverable failure (e.g: cin string to a int type)
- bad: stream is corrupt somehow
The state can be modified by users
When it is in good state, the stream is evaled as true, for example, to continuously read until the eof
string line, word;
while(getline(cin, line)){
dosomething();
}
while(cin >> word){
dosomething();
}
2.1.2. fstream
2.1.3. stringstream
2.2. Concurrency
std::thread: it needs to join or detach. use RAII to make sure it will be handled correctly. std::mutex: RAII with std::lock_guard or std::unique_lock(can lock multiple mutex and unlock) std::recursive_mutex: allow a thread to acquire a mutex multiple times without deadlock
2.3. Algorithm
sort: looks optimized using different sort (insertion <-> quick) when length is short or long Standardization
3. STL Container
not thread-safe
3.1. Sequential Container
3.2. Associative Container
4. C++ Standards
4.1. C++11 (C++0x)
lambda expression
4.2. C++14
4.3. C++17
4.4. C++20
Generic Programming:
concept, constraint
4.5. C++23 ?!
5. Reference
[1] Bjarne Stroustrup's C++ Programming Language 3rd edition
[2] llvm libc++ implementation
[3] A History of C++ by Bjarne Stroustrup
[4] C++ standard
[5] C++ Primer