Re[4]: Порядок создания объектов
От: · Великобритания  
Дата: 01.06.23 11:41
Оценка:
Здравствуйте, CRT, Вы писали:

CRT> CRT>> как компилятор может сначала вызвать b() перед a()?

CRT> CRT>> у меня это в голове не укладывается. Такого быть не должно.
CRT> ·>Может, естественно, если компилятор знает, что это не влияет на наблюдаемое поведение.
CRT> чтобы это знать, компилятор должен учитывать всё что делается внутри a() и b() и так же внутри тех функций которые эти a() и b() в свою очередь вызывают и далее по цепочке. Что-то я сомневаюсь что компилятор копает так глубоко. Хотя кто их знает...
Ну во-первых, а кто сказал, что a() и b() это обязано быть чем-то глубоким.
А во-вторых, это работа такая у оптимизатора компилятора, стараться копать поглубже.

CRT> ·>Другое дело, что в начальном примере был запуск треда, который вроде как по современным стандартам (The memory model was then included in the next C++ and C standards, C++11 and C11) должен создавать барьер.

CRT> это я знаю.

CRT> вообще автор задал вопрос неоднозначно

Ну да... Тонкости в формулировке правильного вопроса есть.

CRT> Короче, однозначно что tool будет проинициализирован перед запуском потока.

+1.
Интересно как оно работало в старых версиях языка... Полагаю это было на уровне OS API.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.