C++ Coding Standards
When reviewing or generating C++ code, follow these rules:
File Naming
- •Source files: snake_case or PascalCase with
.cppextension (e.g.,user_service.cpporUserService.cpp) - •Header files: Same base name with
.h,.hpp, or.hxxextension - •Template files:
.tppor.inlfor template implementations - •Be consistent within a project
Header Guards / Pragma
- •Prefer
#pragma oncefor modern compilers - •Or use traditional guards: UPPER_SNAKE_CASE with
_HPPsuffix
cpp
#pragma once // or #ifndef USER_SERVICE_HPP #define USER_SERVICE_HPP #endif
Namespace Naming
- •Namespaces: all_lowercase or snake_case (e.g.,
myproject,data_processing) - •Nested namespaces: Use C++17 syntax when possible (e.g.,
namespace project::utils {}) - •Avoid
using namespacein headers
Variable Naming
- •Local variables: snake_case or camelCase (e.g.,
user_countoruserCount) - •Member variables: Prefix with
m_or suffix with_(e.g.,m_dataordata_) - •Static members: Prefix with
s_(e.g.,s_instance) - •Constants: UPPER_SNAKE_CASE or kPascalCase (e.g.,
MAX_SIZEorkMaxSize) - •Global variables: Prefix with
g_(e.g.,g_config)
Function/Method Naming
- •Free functions: snake_case or camelCase (e.g.,
calculate_total()orcalculateTotal()) - •Member functions: camelCase or PascalCase (e.g.,
getUserId()orGetUserId()) - •Getters/Setters:
get/setprefix or just property name (e.g.,getName()orname()) - •Factory functions:
Create,Make, orBuildprefix (e.g.,CreateUser())
Class/Type Naming
- •Classes: PascalCase (e.g.,
UserService,DataProcessor) - •Structs: PascalCase (e.g.,
Point,Rectangle) - •Interfaces: PascalCase with
Iprefix optional (e.g.,ISerializableorSerializable) - •Template parameters: Single letter or PascalCase (e.g.,
T,Container,KeyType) - •Enums: PascalCase for type, UPPER_SNAKE_CASE or PascalCase for values
- •Type aliases: PascalCase (e.g.,
using StringList = std::vector<std::string>;)
Smart Pointers
- •Use
std::unique_ptrfor single ownership - •Use
std::shared_ptrfor shared ownership - •Avoid raw
new/delete
Organization
- •Include guards / pragma once
- •System includes (alphabetical)
- •Project includes (alphabetical)
- •Forward declarations
- •Namespace opening
- •Class declarations
- •Inline/template implementations