Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403

Глобальные объекты в разных единицах трансляции

07.11.2019, 13:18. Показов 3184. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Порядок создания глобальных объектов в разных единицах трансляции не определен. Рассмотрим конкретный пример:
C++
1
2
// constants.h
extern const unsigned a, b;
C++
1
2
3
// constants.cpp
extern const unsigned a = 1,
                      b = a + 1;
Стоит ли в данном случаи бояться UB или оператор ',' (со своей гарантией порядка) решил проблему неопределенности?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.11.2019, 13:18
Ответы с готовыми решениями:

Сравнить расстояния, заданные в разных единицах измерения
Написать код по заданию. Задание: известны два расстояния: одно в километрах, другое - в футах(1фут=0,45м).какое из расстояний меньше?

Сравнить две величины в разных единицах измерения
#include <iostream> #include <math.h> using namespace std; int main() { setlocale(LC_ALL, "Russian"); float m,km; ...

Глобальные объекты и функции
Здравствуйте, не подскажите можно ли иметь глобальные объекты и функции, к которым можно обратиться во всех частях проекта, пусть даже друг...

26
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
07.11.2019, 16:39  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IGPIGP Посмотреть сообщение
Я легче пути не знаю
да и я, поэтому то и решил посоветоваться
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.11.2019, 16:42
Цитата Сообщение от Алексей1153 Посмотреть сообщение
кто мешает объединить эти переменные в структуру, раз они так связаны, а вот уже экземпляр структуры статически объявить. Будет всего одна статическая функция
я писал:
Цитата Сообщение от IGPIGP Посмотреть сообщение
Кроме того, имеет смысл группировать статические переменные так, чтобы функции сразу по несколько штук инициализировали и возвращали ссылку на структуру,


Добавлено через 2 минуты
На коленке:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using namespace std;
namespace MyConstants{
extern const int a=123;
extern const int b=234;
 
struct MyConstStruct
{
 MyConstStruct(int a_add_b_, int a_mult_b_)
    :a_add_b(a_add_b_+a_mult_b_)
    ,a_mult_b(a_add_b_*a_mult_b_)
    {    }
 
const int a_add_b;
const int a_mult_b;
};
 
const MyConstStruct & myConstStruct()
{
    static MyConstStruct myMonstrStr(a, b);
    return myMonstrStr;
}
const MyConstStruct &mymonstr=myConstStruct();
}
 
int main()
{
cout<<MyConstants::mymonstr.a_add_b<<' '<<MyConstants::mymonstr.a_mult_b<<'\n';
    return 0;
}
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
07.11.2019, 16:44  [ТС]
Алексей1153,
это неплохой вариант)

правда форма записи немного кривая будет:
C++
1
2
gc::a   // namespace + переменная
gc().a  // функция + доступ к переменной
но это наверно дело вкуса уже...
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.11.2019, 16:47
Цитата Сообщение от JIawliet Посмотреть сообщение
правда форма записи немного кривая будет:
Можете ссылку объявить чтобы не писать ребусы. Я показал)
1
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
07.11.2019, 17:16  [ТС]
_stanislav, IGPIGP, Croessmah, Алексей1153
Может меня кто-то поправит, но даже при таком подходе:
C++
1
2
// cnst.h
extern const int a, b;
C++
1
2
3
4
// .cpp
#include "cnst.h"
extern const int a = 1;
extern const int b = a + 1;
никакой неопределенности нет. Если я правильно перевел, правило гласит: относительный порядок инициализации нестатических локальных объектов, определенных в разных единицах трансляции, не определен.
Но тут у нас определение находится в одной единице трансляции - .cpp! А в .h - только объявления
0
фрилансер
 Аватар для Алексей1153
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,418
07.11.2019, 17:21
Цитата Сообщение от JIawliet Посмотреть сообщение
но даже при таком подходе
ещё бы найти реальную ситуацию, где такой подход нужен - зачем описывать данные так, что потом приходится долго выяснять, как оно будет работать ))
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
07.11.2019, 17:34
Цитата Сообщение от JIawliet Посмотреть сообщение
относительный порядок инициализации нестатических локальных объектов, определенных в разных единицах трансляции, не определен.
Угу. Но ключевое здесь - в разных единицах трансляции.
У Вас они определены в одной единице трансляции, а значит инициализируются в порядке определения.
Если Вы в другой единице трансляции (считай, в другом .cpp) напишите
C++
1
2
#include "cnst.h"
const int c = a;//<-- вот тут бяка
то неизвестно, какая константа будет инициализирована первой,
и, вполне вероятно, c будет инициализирована до a, тогда - беда.

P.S. Я бы еще уточнил, может какое исключение есть для не динамической инициализации.
P.P.S. Но я не думаю, что есть исключения. В любом случае, не надо так делать.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2019, 17:34

Определить, какая из двух заданных в разных единицах измерения скоростей больше
Задание: известны две скорости одна в километрах в час вторая в метрах за секунду какая из скоростей больше? помогите сделать на языке С

Что такое глобальные и локальные объекты класса?
Что такое глобальние и локальные обекты класа. Напишыте пожалуста с примерами.

Глобальные переменные в разных скриптах
Здравствуйте. Я пишу сервер на основе &quot;https://github.com/walkor/Workerman&quot;. В документации там не густо, а моих знаний PHP не хватает. В...

Будут ли все константы гарантированно инициализированы к моменту обращения к ним из разных единиц трансляции
Безопасно ли такое использование: // config.cpp const int ival = 6; const SomeNonTrivialClass obj(...); // config.h extern...

Как заставить видеть глобальные переменные из разных листов?
естЬ фaил внешний rr.js var x=0; function set(a) { top.x = a; } function get() { alert('In x : ' + x); }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru