== C++ Performance (Adapted from CppCon2016 Practical Performance Practices) https://florianjw.de/en/cpp_coding_standard.html - Prefer std::array, then std::vector - Construct and initialize in one step - Use const always when possible - To enable const with complex initialization, use lambdas - Don't recalculate values that only need to be calculated once - Don't disable move operations - moving is more efficient than copying - Avoid shared_ptr copies unless really needed - Prefer returning unique_ptr from factories - Use '\n' instead of std::endl - Use lambdas - they have no overhead compared to direct functions - final can help the compiler optimize virtual function calls - Code branches are expensive === Smaller code is faster code === Do one thing and do it well Simple code is easy to understand, easy to maintain, and as such lead to less bugs. === Only use text formats They can be edited both by humans and by programs. Use generic formats (ini, json, etc.) instead of custom ones. === Document your changes Don't do this just for others, do it for your future self. == Useful compiler options - -fuse-ld=gold - -Wold-style-cast === Setting in meson Compiler arguments are free-form comma-separated list. meson configure -Dcpp_args="-Wold-style-cast" meson configure -Dcpp_link_args="-fuse-ld=gold" == C++ Coding Standard === Naming Conventions - Naming uses camelCase - Private attributes are prefixed with 'm_'. - Include guards should be named SMOLBOTE__H === Compiler - Use the highest sane warning level. === Resource management - Manage your resources with RAII (Resource Acquisition Is Initialization). === Functions - Try to keep the complexity low and the body short.