Skip to content

msporyshev/fefuauv-styleguide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 

Repository files navigation

БоглашСниС ΠΎ стилС написания ΠΊΠΎΠ΄Π°

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ написанию ΠΊΠΎΠ΄Π° Π½Π° языкС C/C++, принятыС для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Ρ… Π½Π΅ΠΎΠ±ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… Π²ΠΎΠ΄Π½Ρ‹Ρ…/ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΠΎΠ², Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π² Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ Π½Π΅ΠΎΠ±ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΠΎΠ² ΠΈ ΠΈΡ… систСм Π”Π°Π»ΡŒΠ½Π΅Π²ΠΎΡΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π€Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ УнивСрситСта (Π”Π’Π€Π£).

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ПО Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ниТСописанных соглашСний.

Если Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊ вопрос, ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ здСсь Π½Π΅ описан, Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΡƒΠΉΡ‚Π΅ΡΡŒ Π·Π΄Ρ€Π°Π²Ρ‹ΠΌ смыслом, своСй Ρ„Π°Π½Ρ‚Π°Π·ΠΈΠ΅ΠΉ ΠΈ настроСниСм людСй, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΡ… ваш ΠΊΠΎΠ΄.

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΡ

  1. CamelCase -- имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ начинаСтся с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹. КаТдоС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ слово Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚Π°ΠΊΠΆΠ΅ начинаСтся с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹. НапримСр: MyName.

  2. camelCase -- имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ начинаСтся с прописной Π±ΡƒΠΊΠ²Ρ‹. КаТдоС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ слово Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ начинаСтся с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹. НапримСр: myName.

  3. under_score -- имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ начинаСтся с прописной Π±ΡƒΠΊΠ²Ρ‹. КаТдоС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ слово ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ символом подчСркивания (Β«_Β») ΠΈ начинаСтся с прописной Π±ΡƒΠΊΠ²Ρ‹. НапримСр: my_name.

  4. ALL_CAPITALS -- всС Π±ΡƒΠΊΠ²Ρ‹ Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ. КаТдоС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ слово ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ символом подчСркивания (Β«_Β»). НапримСр: MY_NAME.

ИмСнования

ИмСна Ρ„Π°ΠΉΠ»ΠΎΠ²

  • ВсС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ исходного ΠΊΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ Π² стилС under_score.
  • Π€Π°ΠΉΠ»Ρ‹ описания сообщСний ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ Π² стилС CamelCase (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ROS Π² точности Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ классы) ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .msg. НапримСр: MyMessage.msg
  • Π€Π°ΠΉΠ»Ρ‹ с исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .cpp. НапримСр: my_source_file.cpp
  • Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .h. НапримСр: my_header_file.h

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°. НС стоит ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ с названиями source.cpp, new_file.h ΠΈΠ»ΠΈ awesome_util.h. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ составляСт Ρ„Π°ΠΉΠ» с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ main, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ допускаСтся ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ main.cpp, Π»ΠΈΠ±ΠΎ module_name.cpp.

ИмСна ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ Π² стилС under_score.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π°, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠ΅ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² сСбС Ρ…Ρ€Π°Π½ΠΈΡ‚ эта пСрСмСнная, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ счСтчики Π² Ρ†ΠΈΠΊΠ»Π°Ρ….

int message_id;    
int object_count;            
int contour_num;   

ИмСна констант

  • ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ ссылки ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.
  • ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, считанныС ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.
const MyClass* object_ptr;            
const MyClass& instance = other_instance;
int window_height = cfg.read("window_height");

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ Π² стилС ALL_CAPITALS. ДопускаСтся ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ константы, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² случаС, Ссли ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ извСстно Π½Π° этапС компиляции.

const int FRAME_OFFSET = 100;    
const double size_ratio = cfg.read("size_ratio");

ИмСна полСй классов

Паблик поля классов ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ константы. ΠŸΡ€Π°ΠΉΠ²Π΅Ρ‚ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‚Π΅ΠΊΡ‚Π΅Π΄ поля ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ Π² стилС under_score_ -- с Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΌ Π½ΠΈΠΆΠ½ΠΈΠΌ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΎΠΌ.

 class TableInfo 
 {
 public:
     int selected_row;
     /*...*/
 private:
     string table_name_;  
     string tablename_;   
     static Pool<TableInfo>* pool_;  
 };

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅.

ИмСна ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²

ВсС ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ программистом Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… (class, struct, typedef, enum ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ шаблонов) ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ Π² стилС CamelCase. АббрСвиатуру ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ словом ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ малСньким Π±ΡƒΠΊΠ²Π°ΠΌΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Google Style Guide:

// classes and structs
class UrlTable { /*...*/ };
class UrlTableTester { /*...*/ };
struct UrlTableProperties { /*...*/ };

// typedefs
typedef hash_map<UrlTableProperties *, string> PropertiesMap;

// enums
enum UrlTableErrors { /*...*/ };

Π”Π°Π²Π°ΠΉΡ‚Π΅ классам ΠΈΠΌΠ΅Π½Π°, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠ΅ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚. Имя класса -- имя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅.

ИмСна Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ Π² стилС under_score. ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π»Π°Π³ΠΎΠ»Ρ‹ Π² качСствС ΠΈΠΌΠ΅Π½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. АргумСнты ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

void get_name(int id) { /*...*/ }

class Runner 
{
    void run();
};

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½ ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ Π² стилС under_score.

using namespace my_namespace;

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ Π² стилС CamelCase.

Поля пСрСчислСния ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ Π² стилС ALL_CAPITALS Π²ΠΎ избСТания ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΈΠΌΠ΅Π½ (констант Π² нашСм ΠΊΠΎΠ΄Π΅ Π½Π΅ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ). ДопускаСтся использованиС пСрСчислимых Ρ‚ΠΈΠΏΠΎΠ² Π² качСствС констант.

НапримСр:

enum Color 
{
    GREEN,
    RED,
    YELLOW,
};

enum VisionConstants {
    FRAMES = 100,
    POOL_SIZE = 2,
};

ΠŸΠΎΡ‚ΠΈΡ…ΠΎΠ½ΡŒΠΊΡƒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π° использованиС enum class Π² качСствС пСрСчислымых Ρ‚ΠΈΠΏΠΎΠ², это максимально ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΈΠΌΠ΅Π½. Π’Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ имСнования Π² стилС ALL_CAPITALS. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ использовании enum class ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅ΠΉ Π² качСствС пСрСчислимого Ρ‚ΠΈΠΏΠ° (Π½Π΅ Π² качСствС констант)допускаСтся ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ поля Π² стилС CamelCase.

enum class Color 
{
    Red,
    Green,
    Blue,
};

Color line_color = Color::Red;

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ Π² стилС ALL_CAPITALS.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ макросы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Π΅Π· Π½ΠΈΡ… ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ.

НапримСр:

#ifdef SURFACE_VEHICLE
/* Π»ΡƒΡ‡ΡˆΠ΅ Ρ‚Π°ΠΊ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ */ 
#endif

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠžΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°

  • Π”Π»ΠΈΠ½Π° строки составляСт Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 120 символов. (ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, ΡΠ΄Π°Ρ‚ΡŒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ с самым малСньким экраном Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅.)
  • ВмСсто табуляций для отступа слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. ΠžΡ‚ΡΡ‚ΡƒΠΏ составляСт 4 ΠΏΡ€ΠΎΠ±Π΅Π»Π°.
  • ВсС Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ utf-8.
  • Никогда Π½Π΅ ставим отступ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π» послС ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉΡΡ ΠΊΡ€ΡƒΠ³Π»ΠΎΠΉ скобки ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉΡΡ

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ, объявлСния ΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

  • ДопускаСтся ΠΏΠΈΡΠ°Ρ‚ΡŒ "однострочныС" Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ссли ΠΎΠ½ΠΈ содСрТат ΠΎΠ΄Π½Ρƒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈ ΡƒΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ строки.
  • ПослС списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ΄Π΅Ρ‚ пСрСнос строки (Π° Π½Π΅ фигурная скобка)
int short_func() { return something; }

ReturnType ClassName::function_name(Type par_name1, Type par_name2) 
{
    do_something();
    /*...*/
}
  • Если список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅ Π²Π»Π΅Π·Π°Π΅Ρ‚ Π² ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ строки, допускаСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ пСрСнос Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Ρ€Π°Π·, начиная с любого Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.
  • ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠ΅Π½Π½Ρ‹ΠΉ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² отдСляСтся ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ двумя отступами, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‚ ΠΊΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • АналогичныС ΠΏΡ€Π°Π²ΠΈΠ»Π° форматирования для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с нСсколькими Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.
ReturnType ClassName::function_name(Type par_name1, Type par_name2,
        Type par_name3, Type par_name4)  
{ 
    do_something();
    /*...*/
}

ReturnType ClassName::function_name(
        Type par_name1, 
        Type par_name2,
        Type par_name3,
        Type par_name4)  
{ 
    do_something();
    /*...*/
}


do_something(
        arg1, arg2, arg3);
do_something(arg1, 
        arg2, arg3);
do_something(arg1, 
        arg2, 
        arg3);

ΠŸΡ€ΠΎΡ‡ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°:

  • Никогда Π½Π΅ ставим отступ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉΡΡ ΠΊΡ€ΡƒΠ³Π»ΠΎΠΉ скобкой
  • Никогда Π½Π΅ пСрСносим ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽΡΡ ΠΊΡ€ΡƒΠ³Π»ΡƒΡŽ скобку послС названия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ²

  • Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽΡΡ Ρ„ΠΈΠ³ΡƒΡ€Π½ΡƒΡŽ скобку оставляСм Π½Π° ΠΎΠ΄Π½ΠΎΠΉ строкС с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ.
  • Π€ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ставим Π² любом случаС, Π΄Π°ΠΆΠ΅ Ссли Π²Π½ΡƒΡ‚Ρ€ΠΈ находится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° инструкция.
  • ДопускаСтся ΠΏΠΈΡΠ°Ρ‚ΡŒ конструкции else if Π½Π° ΠΎΠ΄Π½ΠΎΠΉ строкС Π±Π΅Π· Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок послС else.
if (condition) {  
  ...  
} else if (...) {  
  ...
} else {
  ...
}

for (int i = 0; i < 10000; ++i) {
    printf("I love you\n");
}

switch

  • case Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‚ΡΡ отступом
  • ДопускаСтся Π½Π΅ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ скобки Π²Π½ΡƒΡ‚Ρ€ΠΈ case, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ
  • Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ подряд ΠΈΠ΄ΡƒΡ‰ΠΈΡ… ΠΊΠ΅ΠΉΠ·ΠΎΠ² Π±Π΅Π· Π±Ρ€Π΅ΠΉΠΊΠΎΠ² -- ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ
  • default обязатСлСн
switch(var) {
case 0: case 1: case 2: {
    do();
    break;
}
case 4: {
    do_something_else();
    break;
}
default: {
    /*...*/
}
}

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

  • Π‘Ρ‚Π°Π²ΠΈΠΌ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΡ€ΠΎΠΌΠ΅ . ΠΈ ->. Π’ случаС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° , ΠΏΡ€ΠΎΠ±Π΅Π» ставится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Π½Π΅Π³ΠΎ.
  • Π‘Ρ‚Π°Π²ΠΈΠΌ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² Ρ‚Π΅Ρ€Π½Π°Ρ€Π½ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ ? :.
  • Π½Π΅ ставим ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠΌ.
x = *p;
p = &x;
x = r.y;
x = r->y
y = x + z--;
y = x == 0 ? 1 : 0;

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½

  • ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°ΡΡΡ фигурная скобка находится Π² ΠΎΠ΄Π½ΠΎΠΉ строкС с ΠΈΠΌΠ΅Π½Π΅ΠΌ нСймспСйса
  • ΠžΡ‚ΡΡ‚ΡƒΠΏ Π²Π½ΡƒΡ‚Ρ€ΠΈ нСймспСйса Π½Π΅ дСлаСтся
  • РСкомСндуСтся Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ с ΠΈΠΌΠ΅Π½Π΅ΠΌ нСймспСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Π² строкС с Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉΡΡ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобкой
  • НСймспСйсы Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° пустой строкой, Π·Π°Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΅ΠΉ ΠΎΡ‚ всСго ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ.
namespace foo {
namespace bar {
namespace {

void foo() {  
  ...
}

} // namespace

/*...code...*/

} // namespace bar
} // namespace foo

ΠšΠ»Π°ΡΡΡ‹

  • ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ строки ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉΡΡ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобкой обязатСлСн
  • НСобходимо Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ описаниС класса с ΠΏΠ°Π±Π»ΠΈΠΊ ΠΏΠΎΠ»Π΅ΠΉ
  • Для спСцификаторов области видимости ΠΏΠΎΠ»Π΅ΠΉ класса отступ Π½Π΅ дСлаСтся.
class MyClass 
{
public:
    MyClass(): var_(0) 
    {
        ...
    }

    void foo() { ... }

protected:
    void protected_method() 
    {
        ...
    }
private:
    int var_;
}

ΠžΠ±Ρ‰ΠΈΠ΅ указания ΠΏΠΎ написанию ΠΊΠΎΠ΄Π°

  • ПишСм слово const Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ. (Π Π΅Ρ‡ΡŒ ΠΎΠ± указатСлях ΠΈ ссылках)

Π˜Π½ΠΊΠ»ΡƒΠ΄ Π³Π°Ρ€Π΄Ρ‹ Π² Ρ…Π΅Π΄Π΅Ρ€Π°Ρ…

ВмСсто ΠΈΠ½ΠΊΠ»ΡƒΠ΄ Π³Π°Ρ€Π΄ΠΎΠ² Π² Ρ…Π΅Π΄Π΅Ρ€Π°Ρ… слСдуСт всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ #pragma once.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»Π΅Π½ Π½Π°Π΄ использованиСм ΠΊΠΎΠ΄ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°. БоотвСтствСнно ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ Π²Π΅Π·Π΄Π΅, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠΎΠ΄Π° Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² устройств.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ бСзопасный ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΠ΄. А ΠΈΠΌΠ΅Π½Π½ΠΎ:

  • Никаких "Π³ΠΎΠ»Ρ‹Ρ…" ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ shared_ptr, unique_ptr ΠΈΠ»ΠΈ weak_ptr
  • Π›ΡŽΠ±ΠΎΠΉ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ дСструктор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ
  • Код, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Π² Π΄ΡƒΡ…Π΅ finalize_smth() ) Π½ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π² SCOPE_EXIT, Π»ΠΈΠ±ΠΎ Π² дСструктор любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, созданного Π½Π° стСкС.
  • НС слСдуСт Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² конструкторах ΠΈ дСструкторах

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ классы?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ структуры Π² Ρ‚ΠΎΠΌ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠΌ случаС, Ссли всС ΠΈΡ… поля Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ°Π±Π»ΠΈΠΊ ΠΈ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ "однострочными". Π˜Π½Π°Ρ‡Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ класс.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ

  • Π₯Π΅Π΄Π΅Ρ€ Ρ„Π°ΠΉΠ» начинаСтся с #pragma once
  • Π”Π°Π»Π΅Π΅ ΠΈΠ΄ΡƒΡ‚ ΠΈΠ½ΠΊΠ»ΡƒΠ΄Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… рос ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Π² Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Π΅ скобки.
  • Π”Π°Π»Π΅Π΅ ΠΈΠ΄ΡƒΡ‚ ΠΈΠ½ΠΊΠ»ΡƒΠ΄Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ
  • Π”Π°Π»Π΅Π΅ ΠΈΠ΄ΡƒΡ‚ нСймспСйсы ΠΈ классы

Π—Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово using Π² Ρ…Π΅Π΄Π΅Ρ€Π°Ρ…!, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π½ΠΈΡ… алиасы для нСймспСйсов.

// myclass.h
#pragma once

#include <iostream>
#include <vector>
#include <opencv/core.h>
#include <opencv/highgui.h>
#include <config_reader/yaml_reader.h>

#include "my_other_class.h"
#include "my_local_utils.h"

/*...class declaration... */
  • Π’ .cpp Ρ„Π°ΠΉΠ»Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ using, Ρ‚Π°ΠΊ ΠΈ алиасы нСймспСйсов.
// myclass.cpp
#include <vector>

#include "my_class.h"

using std::vector;
using namespace cv;

namespace msg = ros::geom_msgs;
  • ВмСсто статичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ нСймспСйсы. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ вмСсто этого:
static void foo() { ...}
static int global_var;

ПишСм это:

namespace {
    void foo() { ...}
    int global_var;
} // namespace

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ классов

  • Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ класса выносим ΠΈΠ· Ρ…Π΅Π΄Π΅Ρ€Π°. ΠžΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ inline Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • inline Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ сразу Π²Π½ΡƒΡ‚Ρ€ΠΈ класса.
  • Если ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ измСняСт Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ const Π² Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ
  • НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ слово mutable
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ explicit ΠΏΠ΅Ρ€Π΅Π΄ всСми конструкторами классов, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ Ρ€ΠΎΠ²Π½ΠΎ 1 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π±Π΅Π· значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
// myclass.h
...

class MyClass 
{
public:
    MyClass();
    explicit MyClass(int a, int b = 0);
    explicit MyClass(string name);

    const Data& get_data() const;

    inline void func() 
    { 
        /*...*/ 
    }
};

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published