Skip to content

Coding Style Guidelines

  • Prefer CppCoreGuidelines if possible.
  • Avoid friend keyword.
  • Use signed integers unless the integer is holding a bit pattern.
  • Use the smallest integer type that is required to hold all desired values.
  • Do not cast from signed to unsigned unless you want the bit pattern, prefer to cast from unsigned to signed instead.

Naming Conventions

  • namespaces: snake_case
  • types: UpperCamelCase
  • temporary variable: lowerCamelCase
  • private member variables: lowerCamelCase with trailing underscore
  • public member variable: lowerCamelCase
  • constexpr variable: UpperCamelCase
  • function names: lowerCamelCase
  • function parameters: lowerCamelCase with leading underscore
  • Template parameter name: UpperCamelCase
  • preprocessor definitions: SCREAMING_CASE
  • east const instead of west const

Example

namespace org::coding_style::naming_conventions
{
    void eastConst() {
        int const a = 42;        // a is const
        int const* p = &a;       // value in p is const, p is not const.
        int const *const p = &a; // both value and p are const.
    }

    enum class Role { Employed, Unemployed };

    struct User
    {
        std::string firstname;
        std::string lastname;
        Role role;
    };

    class Actor
    {
      public:
        Actor(std::string _firstname, std::string _lastname, Role _role) :
            user_{ std::move(_firstname), std::move(_lastname), _role },
            credits_{ 0 }
        {}

        void giveOrTakeCredits(int _amount) noexcept
        {
            constexpr auto Scalar = 2;
            credits += Scalar * _amount;
        }

        std::string name() const
        {
            auto const result = user.firstname + " " + user.lastname;
            return result;
        }

      private:
        User user_;
        int credits_;
    };
}