C++ Resources
Fundamentals
- A Beginner's C++ for a solid foundation in programming, though it is a bit outdated regarding C++
- Teach Yourself C++ in 21 Days for a more up-to-date lesson (after reading A Beginner's C++)
- Thinking in C++: 2nd Edition a free online book teaching C++ programing
- C++ Reference Guide which, despite its name, is a general tutorial for C++
Advanced Concepts
- The C++ Super FAQ for all your C++ questions and for learning C++ gotchas and best practices
- Advanced C++ Lessons for template metaprogramming and other advanced C++ features
- A gentle introduction to template metaprogramming for additional instructions on metaprogramming
- Exception-Safe Generic Containers for information about exception-safety
- Guru of the Week (GotW), Herb Sutter's blog covering various advanced C++ lessons
- Scott Meyer's blog for musings and advice on a variety of advanced C++ concepts
General
- C++ reference for general reference information on C++
- C++ on Wikipedia for more in-depth, but less comprehensive C++ information
Language
- C++ language reference for reference information about the C++ language
- C++11 Draft Spec for specifics about the C++ language specification
Standard Library
- C++ containers reference for reference information about vectors, sets, queues, etc.
- C++ I/O reference for reference information about istream, ostream, iostream, and related libraries.
- Unofficial C++ Standard Library Reference for reference documentation on the standard library
- Standard Template Library (STL) Reference for documentation on the C++ containers and algorithms
System Libraries
- IEEE Std. 1003.1 (a.k.a. "POSIX") for C functions provided by UNIX-compliant OSes that can be used in C++
- Linux Manual Pages: System Libraries for C functions provided on Linux that can be used in C++
General
- Boost C++ Libraries for a collection of popular, high-quality C++ libraries covering a variety of functionality
- Qt Project for a collection of libraries also covering a wide variety of functionality
Logging
- Google Glog (my personal preference) for logging debugging information during program execution
- Log4Cxx for an alternative, also high caliber, debug logging framework for C++
Testing
- Google Test for writing C++ unit tests
- Google Mock for easily defining mock objects and mock expectations for use in C++ unit tests
Serialization
- Protocol Bufers for cross-language/cross-platform data serialization supporting backwards compatibility
- Flat Buffers an alternative to protocol buffers optimized for efficiency over safety and ease-of-use
- Cereal for serialization of C++ objects to/from JSON, XML, and C++ binary format (not cross-language)
- MessagePack for cross-language / cross-platform binary serialization (backwards compatibility not builtin)
Parellelization
- C++11 thread support library reference documentation for builtin multithreading support
- Boost threading library for a portable threading library with more features than the builtin threads
- Boost interprocess library which can be used to support process-level parallelism
- Boost lock-free library for concurrent datastructures that can be used in multithreaded programs
- OpenMPI for distributing and scheduling processing across multiple CPU cores and machines
Parsing
Networking
- Qt Networking Module for cross-platform networking ranging from low-level TCP to high-level HTTP
- C++ REST SDK for fetching HTTP URLs and parsing JSON responses
- Boost asynchronous I/O library for cross-platform, low-level networking primitives
- ACE for high-level remote procedure calls (RPCs) and low-level networking capabilities
- gRPC for a high-performance remote procedure call (RPC) system based on protocol buffers
Numerical Processing
- Boost uBLAS library for vector and matrix representations and operations
- Boost Multiprecision library for arbitrary precision big numbers
- GNU Multiple Precision Library for an alternative arbitrary precision big number library
Encryption
Note that I have not have used any of these, and crypto is hard... use at your own risk
- OpenSSL is a widely used (and likely to be heavily scrutinized) library for implementing SSL/TLS encryption
- Crypto++ is a well-reputed and seemingly popular library, but I have no first hand knowledge
- libgcrypt provides a C interface for very similar functionality to the above
- GnuPG Made Easy provides a C API to GPG, supporting asymmetric encryption
User Interface
- CTemplate for generating HTML in C++ (which is how UIs should really work)
- Wt also for generating HTML, but using a widget library rather than manipulating raw HTML
- Qt for a well-written, easy-to-use, cross-platfrom desktop GUI library (but UIs should be web apps, right?)
- WxWidgets an alternative to Qt that has a more permissive license but is not as high caliber
Compilers
- GNU Compiler Collection (GCC) for a battle tested, cross-platform compiler that generates machine code
- Clang for a very promising (but not as heavily tested) compiler that generates LLVM byte code
Build Systems
- Bazel (my recommendation) for Google's general-purpose, open source build system
- CMake for an easy-to-use, decalarative. cross-platform build system
- Gradle for a great, general purpose, modular build system with early C++ support
- Scons for a more flexible, Python-based, cross-platorm build system
- GNU Make for very simple projects (while it can be cross-platform, it is easy to get wrong)
- Automake a predecessor to CMake, Scons, and Gradle (not recommended)
Integrated Development Environments
As a brief reminder, you don't need an IDE to develop; you just need a text editor and a compiler. Also, don't let your IDE be a substitute for a proper, commandline-based build system. Being able to build from the commandline is a must if you want to do continuous integration. Or if you want to collaborate with others who may be using a different IDE.
- Cloud 9 for an online IDE (what I'm using for this website, in fact)
- Code Envy for yet another web-based IDE
- Code Anywhere for yet another web-based IDE option
- Nitrious.io for yet another web-based IDE option
- CodeLite for a cross-platform desktop-based IDE
- Eclipse CDT for an alternative, cross-platform, desktop-based IDE
- Code::Blocks for yet another cross-platform, desktop-based IDE
- Xcode for anyone who is developing on Mac OS X
- KDevelop for anyone who is developing on Linux
Other
- IDEOne an online compiler for quickly testing / validating small snipppets
- GDB for a debugger that can step through and inspect the state of a C++ application
- AddressSanitizer for detecting use-after-free and other bad memory access patterns
- ThreadSanitizer for detecting data races in multithreaded applications
- Doxygen for automaticaly generating/extracting documentation