powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / C: что записывать в заголовочные файлы?
25 сообщений из 185, страница 2 из 8
C: что записывать в заголовочные файлы?
    #39990744
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какое слово из "не используйте анонимные namespace в заголовочных файлах" ты прочёл как
"static лучше"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990747
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Критический недостаток: в отличии от вложенных функций у них нет доступа к локальным
переменным родителя. Фактически, их можно тупо скопипастить "наружу" и они ничего не
потеряют и не приобретут в плане функциональности.

Ну почему же. Пишете [&,this] - и есть доступ ко всему что может окружающий блок.
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990752
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyи есть доступ ко всему что может окружающий блок.
А ещё их нельзя вызвать из двух разных мест. То есть code reuse отпадает и остаётся только
костыль для того, чтобы впихнуть невпихуемое: код на место значения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990757
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем их вызывать из разных мест? Суть лямбд в использовании их там где они объявлены.
Для повторного использования кода есть классы и функции.
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990771
Dimitry Sibiryakov
Какое слово

походу то самое, которое ты прочёл, как "анонимные лучше"
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990775
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyСуть лямбд в использовании их там где они объявлены.

В таком варианте они не отличаются от обычных фигурных скобок. За исключением того, что,
как уже сказано, могут занимать место значения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990799
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответы ! :-)
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990808
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
А ещё их нельзя вызвать из двух разных мест. То есть code reuse отпадает и остаётся только
костыль для того, чтобы впихнуть невпихуемое: код на место значения.
Вызвать из двух разных мест одной и той же области видимости можно! Это же обычный функтор...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
void foo()
{
  auto functor = [&] () -> bool
  {
    ...
    return true;
  }

  if ( functor() )
  {
    ...
  }

  return functor();
}
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990811
лямбды не предлагают какой-то новый функционал, но они позволяют втыкать простые ф-и посреди кода, прямо там, где они нужны. Это экономит время, поскольку не нужно писать новый класс или внешнюю ф-ю.
Они и в многопоточности юзабельны.
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990816
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020они позволяют втыкать простые ф-и посреди кода

Это и составной оператор может. У него и синтаксис попроще будет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990818
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
petrav
Вместо static можно использовать анонимный namespace.

говорят static лучше
авторSummary
Avoid working with anonymous namespaces if you’re working with headers. Due to default internal linkage, each translation unit will define its own unique instance of members of the unnamed namespace which can cause unexpected results, bloat the resulting executable, or inadvertently trigger undefined behavior due to one-definition rule (ODR) violations.

Тут вроде написано про работу с заголовочниками. Но даже если безымянный неймспейс написать в заголовочнике... Я не понял откуда там может взяться undefined behavior. Ведь #include это же просто подстановка текста.
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990853
UB из-за ODR, а ODR это:
авторПравило одного определения (One Definition Rule, ODR) — один из основных принципов языка программирования C++. Назначение ODR состоит в том, чтобы в программе не могло появиться два или более конфликтующих между собой определения одной и той же сущности (типа данных, переменной, функции, объекта, шаблона). Если это правило соблюдено, программа ведёт себя так, как будто в ней существует только одно, общее определение любой сущности. Нарушение ODR, если оно не будет обнаружено при компиляции и сборке проекта, приводит к непредсказуемому поведению программы.
и он пишет, что
авторИз-за внутренней связи по умолчанию каждая единица перевода будет определять свой собственный уникальный экземпляр членов безымянного пространства имен, что может привести к неожиданным результатам, раздуванию результирующего исполняемого файла или непреднамеренному запуску неопределенного поведения из-за нарушения правила одного определения (ODR).
т.е. получится безымянное пространство, которое сложится с любым другим безымянным пространством, и если там совпадут названия сущностей, то будет UB.
Я так понял.
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990854
Dimitry Sibiryakov
Алексей Роза 2020они позволяют втыкать простые ф-и посреди кода

Это и составной оператор может. У него и синтаксис попроще будет.
и макросы тоже могут.
а вот у составного оператора переменные где?
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990875
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020а вот у составного оператора переменные где?

Там же, где и у лямбд: или внутри, или снаружи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990880
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020,
Не совпадут.
Не надо захламлять общее пространство и в полный рост надо использовать пространство имен.
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990883
ну не заменит, так не сделаешь ты:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// function = generic function pointer type. SUPER useful for passing functions AS parameters
void perform_operation(function<void()> f)
{
    f(); // вот этот вызов инкрементирует x
}

int main(int argc, char *argv[])
{
    int x = 100;
    auto func = [&]() {x++;};

    perform_operation(func);
    cout << "X: " << x << endl; // 101
}
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990885
PetroNotC Sharp
Алексей Роза 2020,
Не совпадут.
Не надо захламлять общее пространство и в полный рост надо использовать пространство имен.

мы про анонимные неймспейсы
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990888
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020,
Я понял.
Вы не ответили какой профит от такого бардака)).
Зачем делать анонима чтобы компилятор его именовал?
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990898
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
и он пишет, что
авторчто может привести к ... непреднамеренному запуску неопределенного поведения из-за нарушения правила одного определения (ODR).

т.е. получится безымянное пространство, которое сложится с любым другим безымянным пространством, и если там совпадут названия сущностей, то будет UB.
Я так понял.
Никакого UB там не может быть.
Анонимные неймспейсы гарантируют что все что внутри них не подвержено нарушению ODR, потому что компилятор гененрирует уникальные имена в каждой единице трансляции.
Они собственно для этого и введены в язык.

А про раздувание машинного кода - да, вполне возможно.
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990922
Anatoly Moskovsky
Никакого UB там не может быть.

так о чём он пишет тогда?
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990923
PetroNotC Sharp
Зачем делать анонима чтобы компилятор его именовал?

это вон там спрашивай:
petrav
Вместо static можно использовать анонимный namespace.
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990947
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
так о чём он пишет тогда?

Ну мало ли, какой-то студент написал чушь. ЧТо тут обсуждать ))
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990970
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
Спасибо за ответы ! :-)

Больше нет вопросов?
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990982
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
mini.weblab
Спасибо за ответы ! :-)

Больше нет вопросов?

А вам бы только темы закрывать. Это не навязчивая идея?
...
Рейтинг: 0 / 0
C: что записывать в заголовочные файлы?
    #39990983
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

я подумала, и порезала один большой файл на несколько небольших логических кусков,
и дальше, я пришла к решению exp98.
...
Рейтинг: 0 / 0
25 сообщений из 185, страница 2 из 8
Форумы / C++ [игнор отключен] [закрыт для гостей] / C: что записывать в заголовочные файлы?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]