C++ Лайфхаки плюсов или рекомендации по стилю

  • Автор темы Автор темы TheXSVV
  • Дата начала Дата начала
PoC Life
Пользователь
Пользователь
Статус
Онлайн
Регистрация
22 Авг 2022
Сообщения
681
Реакции
69
Расскажите свои лайфхаки плюсов. Пример лайфхака, который я недавно увидел:
C++:
Expand Collapse Copy
#include "includes.h"
И в includes.h все инклуды, чтобы по сто раз не инклудить либки по типу iostream

Также, т.к. я пришёл с джавы у нас принято называть методы и переменные с маленькой буквы без _, а константы капсом с _, пример:
Java:
Expand Collapse Copy
static final String BLABLA_CONSTANT = "Константа = капс";
int newInt = 5;
void printAboba() {}

Есть ли что-то такое в плюсах? Потому что в windows.h методы с большой буквы (NtБлабла), в других либах (а может даже от майкрософт как windows) они используют стиль названия методов с маленькой буквы. Так что пока не понял этого

Также хотел спросить как сделать лучше, в классе Person.h сделать виртуальный метод и сделать его реализацию в BasicPerson или сделать класс BasicPerson, в классе Person унаследовать класс BasicPerson и использовать using BasicPerson::foo?
 
Последнее редактирование:
  • Попкорн
Реакции: mxrz
Потому что в windows.h методы с большой буквы (NtБлабла), в других либах (а может даже от майкрософт как windows) они используют стиль названия методов с маленькой буквы.
Потому что внутри компании у микромягких свои соглашения о стандартах написания кода
 
Потому что внутри компании у микромягких свои соглашения о стандартах написания кода
так почему же Window.h использует первую букву заглавной, а другой header (много на плюсах не писал, точно не вспомню) от них совсем по другому
 
Очень кайфовый совет для того чтобы время твоей компиляции вскочили в разы. Так же классный способ засрать глобальный неймспейс.
Есть ли что-то такое в плюсах?
Есть. Выбери один кодстиль и придерживайся его. Не так важны мелочи по типу нейминга, главное чтобы это было адекватно, и стабильно на протяжении всей кодбазы.
в классе Person.h сделать виртуальный метод и сделать его реализацию в BasicPerson или сделать класс BasicPerson, в классе Person унаследовать класс BasicPerson и использовать using BasicPerson::foo?

person.h:
Expand Collapse Copy
#ifndef PERSON_H_
#define PERSON_H_

class Person {
   std::uint8_t age;
   std::string name;
public:
   virtual void say_hello() = 0;
}

class BasicPerson : public Person {
   void say_hello() override;
}

#endif // PERSON_H_

person.cpp:
Expand Collapse Copy
#include <your_project/person.h>

void BasicPerson::say_hello() {
    ...
}

обычно это делается так, но prefer composition over inheritance.
 
Последнее редактирование:
чтобы по сто раз не инклудить либки по типу iostream
#include буквально вставляет какой то там файл в cpp файл, на .h ему, в целом (по нашим конвенциям) поебать.

a.h:
Expand Collapse Copy
#define LOL 42

a.cpp:
Expand Collapse Copy
#include <your_project/a.h>

int lmao() {
   return LOL;
}

// после обработки препроцессором становится

#define LOL 42

int lmao() {
   return LOL;
}

так что каждый раз, что ты будешь инклудать свой волшебный инклудес.х в твой спп файл будет влетать массивная тонна говна. че нибудь, да сломается.
 
C++:
Expand Collapse Copy
И в includes.h все инклуды, чтобы по сто раз не инклудить либки по типу iostream
Очень плохая вещь.
Также, т.к. я пришёл с джавы у нас принято называть методы и переменные с маленькой буквы без _, а константы капсом с _, пример:
Ну тут у каждого что-то свое, если ты использовать сущестующие используй ту же стилистику camelCase, snake_case, UpperCamelCase и тд...
А ещё советую почитать
Пожалуйста, авторизуйтесь для просмотра ссылки.

Ну и ещё style guide lines:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
И другие, найдешь в каждом что-то полезное
 
Очень кайфовый совет для того чтобы время твоей компиляции вскочили в разы. Так же классный способ засрать глобальный неймспейс.
Да я просто увидел, буду знать, что задумка плохая

Есть. Выбери один кодстиль и придерживайся его. Не так важны мелочи по типу нейминга, главное чтобы это было адекватно, и стабильно на протяжении всей кодбазы.
так почему же Window.h использует первую букву заглавной, а другой header (много на плюсах не писал, точно не вспомню) от них совсем по другому
?

person.h:
Expand Collapse Copy
#ifndef PERSON_H_
#define PERSON_H_

class Person {
   std::uint8_t age;
   std::string name;
public:
   virtual void say_hello() = 0;
}

class BasicPerson : public Person {
   void say_hello() override;
}

#endif // PERSON_H_

person.cpp:
Expand Collapse Copy
#include <your_project/person.h>

void BasicPerson::say_hello() {
    ...
}
обычно это делается так, но prefer composition over inheritance.
Понял, просто недавно читал один пост, там чел какую-то поеботу делал, это правильно или нет?
Пожалуйста, авторизуйтесь для просмотра ссылки.
1694948141094.png


просто не понимаю нахуя ему миллиард using.
#include буквально вставляет какой то там файл в cpp файл, на .h ему, в целом (по нашим конвенциям) поебать.

a.h:
Expand Collapse Copy
#define LOL 42

a.cpp:
Expand Collapse Copy
#include <your_project/a.h>

int lmao() {
   return LOL;
}

// после обработки препроцессором становится

#define LOL 42

int lmao() {
   return LOL;
}

так что каждый раз, что ты будешь инклудать свой волшебный инклудес.х в твой спп файл будет влетать массивная тонна говна. че нибудь, да сломается.
Понял, ещё раз спасибо


Ну тут у каждого что-то свое, если ты использовать сущестующие используй ту же стилистику camelCase, snake_case, UpperCamelCase и тд...
А ещё советую почитать
Пожалуйста, авторизуйтесь для просмотра ссылки.

Ну и ещё style guide lines:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
И другие, найдешь в каждом что-то полезное
Так, про стиль я понял, нашёл прикольный, но мне так и не ответили какого хуя один хейдер от майкрософт использует отличный стиль от другого
 
Так, про стиль я понял, нашёл прикольный, но мне так и не ответили какого хуя один хейдер от майкрософт использует отличный стиль от другого
Потому что их пишут разные люди?, да и так таковой согасованости по всему коду у майков нету, знаю что WinAPI - UpperCamelCase, а stl - snake_case
так почему же Window.h использует первую букву заглавной, а другой header (много на плюсах не писал, точно не вспомню) от них совсем по другому
Ты можешь имя инклюда коверкать как хочешь, сути это не меняет, тот же Windows.h - windows.h - WINDOWS.H и так далее
 
да и так таковой согасованости по всему коду у майков нету, знаю что WinAPI - UpperCamelCase, а stl - snake_case
странно, окей, буду знать

Но из лайфхаков мне никто ничего не сказал
 
просто не понимаю нахуя ему миллиард using.
Именно в этом примере не особо понимаю зачем такие alias, но я определяю все типы которые использует мой класс/header сразу, дабы при портировании кода, или некоторых изменениях, не приходилось вручную везде искать тот или иной тип
Но из лайфхаков мне никто ничего не сказал
Лайфхаков то особо нету в плюсах, почитай в гайд-лайнах, там много полезной информации, может это и будут твои лайфхаки
 
Оффтоп:
1694948740066.png

Можно ли отключить эти троеточия нахуй
1694948758811.png

Так понимаю это варнинги
 
Лайфхаки есть везде
Блядь.

Синтаксический сахар? Нет тут его.
До 2019-20 года нам нужна была мега умная библиотека fmt, чтобы красиво форматировать наши строчки.
просто не понимаю нахуя ему миллиард using.
Хуевая и дешевая реализация около-SFINAE (???)

Так как в этой статье плюсы не пишут.


Оффтоп:
Посмотреть вложение 259006
Можно ли отключить эти троеточия нахуй
Не пользуйся си с классами, нахуй.
 
  • Ахаха
Реакции: mxrz
какого хуя один хейдер от майкрософт использует отличный стиль от другого
индус который писал хедер1 решил что индус который писал хедер2 - пидор, поэтому написал название вот так.

в плюсах нет стандарта нейминга (не ебу почему). стандарт - говнище.
wanna be sum type =D

"если это синтаксический сахар, гуманитарий обосанный, нам не летать к далёкому космосу"
 
  • Печально
Реакции: mxrz
C++:
Expand Collapse Copy
auto lmbd = [1](2) {
   3
}

lmbd();

// 1 - захватывать значения в скопе по референсу (&), по значению (=) или не захватывать вовсе ().
// 2 - список параметров, как у функции.
// 3 - тело лямбды, как у функции.
Не совсем понимаю что за сахар
гугл -> syntactic sugar
 
"если это синтаксический сахар, гуманитарий обосанный, нам не летать к далёкому космосу"
А почему он тривиально не может быть сахаром, тк основа его - врапер над возвращаемым типом объекта, вполне себе сахар
C++:
Expand Collapse Copy
auto lmbd = [1](2) {
   3
}

lmbd();

// 1 - захватывать значения в скопе по референсу (&), по значению (=) или не захватывать вовсе ().
// 2 - список параметров, как у функции.
// 3 - тело лямбды, как у функции.

гугл -> syntactic sugar
Захват this? Mutable для захвата по ссылке? Явность возвращаемого типа? Ну и константность лямбд
 
Назад
Сверху Снизу