diff options
-rw-r--r-- | contributing.md | 80 |
1 files changed, 59 insertions, 21 deletions
diff --git a/contributing.md b/contributing.md index cc22cd5..0c24560 100644 --- a/contributing.md +++ b/contributing.md @@ -110,42 +110,78 @@ void MyClass::increment() { m_value += 1; } ``` - when to use references + +-- If the input parameter in the function cannot accept a nullptr ```cpp -// good -class MyClass -{ -public: - void do_something(const int i); - void do_something(const std::string &str); -}; +void foo::function(const std::string& name){}; +``` +-- Use a reference when you know that the object will exist for the lifetime of the reference and when nullability is not a concern. +```cpp +int x = 10; +int& ref = x; +ref = 20; +``` + +-- If a function should return a reference to an object that exists elsewhere (such as a member of a class or an element in a container), you can return a reference. +```cpp +container& get_element(std::vector<container>& vec, size_t index){ + return vec[index]; +} +``` +- When to use pointers + +-- Use pointers when dealing with dynamic memory +```cpp +int* ptr = new int(5); +delete ptr; +``` + +-- Pointers can be nullptr, allowing them to represent "no object." Use pointers when you need to express optional ownership or reference. +```cpp +void foo::function(int* ptr){ + if(ptr){ + // ptr is not null + } +} +``` + +-- When dealing with polymorphism. +```cpp +class Base {}; +class Derived : public Base {}; + +Base* obj = new Derived(); +obj->function(); ``` + + - Do not use auto +-- Instead of doing this ```cpp -// instead of doing this auto s = "Hello"; auto x = "42"s; auto x = 42; auto x = 42.f; - -// Do this +``` +-- Do this. +```cpp std::string s = "Hello"; std::string x = "42"s; int x = 42; float x = 42.f; ``` - Do not define constants as define but instead directly declare it. +-- This is wrong. ```cpp -// Bad Idea #define PI 3.14159; +``` -// Good Idea +-- Do this. +```cpp namespace my_project { class Constants { public: - // if the above macro would be expanded, then the following line would be: - // static const double 3.14159 = 3.14159; - // which leads to a compile-time error. Sometimes such errors are hard to understand. static constexpr double PI = 3.14159; }; } @@ -163,7 +199,7 @@ Web_color webby = Web_color::blue; Print_color(webby); Print_color(Product_info::blue); ``` -Instead use an enum class: +- Instead use an enum class: ```cpp void Print_color(int color); @@ -176,6 +212,7 @@ Print_color(webby); // Error: cannot convert Web_color to int. Print_color(Product_info::red); // Error: cannot convert Product_info to int. ``` + - Think about using size_t instead of using int for preventing processor mismatching. This might prevent a bug in the future. ```cpp std::size_t i = 0; // use this instead of using a int @@ -183,16 +220,17 @@ double x = 0.0; ``` - comment style guide, you can use TODO:, FIXME:, NOTE:, or HACK: as admonitions when needed. +-- Bad example +```cpp +// Draw loading screen. +draw_load_screen(); +``` +-- Better ```cpp // Compute the first 10,000 decimals of Pi. // FIXME: Don't crash when computing the 1,337th decimal due to `increment` // being negative. ``` -bad example -```cpp -// Draw loading screen. -draw_load_screen(); -``` ## CMakeLists specific |