- Don't make changes to generated clients directly. Make your changes in the generator. Changes to Core, Scripts, and High-Level interfaces are fine directly in the code.
- Do not use non-trivial statics anywhere. This will cause custom memory managers to crash in random places.
- Use 4 spaces for indents and never use tabs.
- No exceptions.... no exceptions. Use the Outcome pattern for returning data if you need to also return an optional error code.
- Always think about platform independence. If this is impossible, put a nice abstraction on top of it and use an abstract factory.
- Use RAII, Aws::New and Aws::Delete should only appear in constructors and destructors.
- Be sure to follow the rule of 5.
- Use the C++ 11 standard where possible.
- Use UpperCamelCase for custom type names and function names. Use m_* for member variables. Don't use statics. If you must, use UpperCamelCase for static variables
- Always be const correct, and be mindful of when you need to support r-values. We don't trust compilers to optimize this uniformly across builds so please be explicit.
- Namespace names should be UpperCamelCase. Never put a using namespace statement in a header file unless it is scoped by a class. It is fine to use a using namespace statement in a cpp file.
- Use enum class, not enum
- Prefer #pragma once for include guards.
- Forward declare whenever possible.
- Use nullptr instead of NULL.