Информация об изменениях

Сообщение Re[13]: так компайл тайм рефлекшину быть 26-й стандарт ?? от 25.03.2026 11:23

Изменено 25.03.2026 11:29 ботаныч

Re[13]: так компайл тайм рефлекшину быть 26-й стандарт ??
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, ботаныч, Вы писали:


R>>>Во-вторых, здесь тоже будет создан "инстанс", т.к. указатель — это тоже объект (нулевой указатель в т.ч).

Б>> разыменования здесь нет.

R>??? Где ты видишь в ЭТОМ моём высказывании слово "разыменовывание"? Здесь же про другое.

-третьих, я вот думаю, а не будет ли здесь UB (разыменовывание нулевого указателя)?

твоя фраза ?
это 1.
2. ты уводишь тему в разбор, что такое указатель. И ежу понятно, что указатель "имеет" и дестрвуктор, у него есть и прочее соответствующие методы по умолчанию, но память под это все выделяться не будет. т.к. скорее всего будет ссылаться на константную облаcть от типизированных nullptr. Хотя все это чисто для удобства в шаблонировании, и если тебе прилетает в шаблон в качестве template <typename T> void call(T ptr) { ...} using T = ObjectTypePtr*; // то можно вызывать ptr.~T(); //
к чему это обсуждать ? тема несколько вообще про джругое

R>Приведение к УКАЗАТЕЛЮ на объекты класса, в котором реализован статический метод, если говорить точнее. Результатом этого приведения является временный объект указателя соответствующего типа. Ещё раз: указатель — это объект, со всеми свойстами, присущими объектам (size, lifetime, storage duration). И размер указателя никак не меньше размера объекта пустой структуры. Скорее всего компилятор соптимизирует создание ненужных временных объектов (как указателя, так и объекта пустого класса), но это уже десятый вопрос.


Б>>В выражении ((std::numeric_limits<double>*)nullptr)->epsilon() никакой объект не будет инстанцирован.


R>Смотри выше. Бутет СОЗДАН объект указателя. И слово "инстанцирование" в С++ обозначает создание воплощений шаблонов, но никак не создание объектов.

) выше там про reflection по теме, нет у меня времени обсуждать вещи очевидные, инстанцияация шаблонов и инстанса объекта класса, вполне корректные высказывания же) а инстанс, он инстанциируется. Коечно вещи разные с инстанциацией шаблона

Б>>более близко выглядело бы ((std::numeric_limits<double>*)nullptr)->epsilon(), для статики.

Б>>разыменования здесь нет...
Б>>для перехода в точку можно было бы написать (*(std::numeric_limits<double>*)nullptr).epsilon(), но тут уже UB, потому я написал самое близкое и корректное к std::numeric_limits<double>::epsilon().

R>На чём основаны эти утверждения? Или ты написал это просто потому, что тебе хочется в это верить? Ну так я тебя огорчу, стандарт C++ утверждает другое:


R>https://timsong-cpp.github.io/cppwp/expr.ref#2


R>

R>The expression E1->E2 is converted to the equivalent form (*(E1)).E2; the remainder of [expr.ref] will address only the form using a dot.


R>Выражение E1->E2 ЭКВИВАЛЕНТНО выражению (*(E1)).E2

Это в теории, а на практике я встречал ситуации падение сразу после разыменования указателя. И в тоже время -> работал без проблем, даже с нестатическими методами, если в методе не было обращений к полям инстанса класса (невалидного).

R>(если только операторы '->' и '*' не являются перегруженными функциями). И из этой эквивалентности следует, что разыменовывание указателя имеет место быть в обоих случаях. На счёт UB я по-прежнему не уверен, могу только сказать точно, что оно либо есть в обоих случаях, либо его нет, тоже в обоих случаях.

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

R>Ну так я и писал только о тех двух операторах, о которых шла речь: https://rsdn.org/forum/cpp/9068221.1
Автор: B0FEE664
Дата: 19.03 18:07
. Это ты зачем-то приплёл сюда третий.

А может мне просто захотелось с тобой поговорить .. )) под знакомым тебе эккаунтом я не могу — заблочен, за https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B3%D1%83%D0%BB%D1%8C
такое ))

Меня интересует когда, и как оно появится, уж очень хочется пощупать.
Re[13]: так компайл тайм рефлекшину быть 26-й стандарт ??
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, ботаныч, Вы писали:


R>>>Во-вторых, здесь тоже будет создан "инстанс", т.к. указатель — это тоже объект (нулевой указатель в т.ч).

Б>> разыменования здесь нет.

R>??? Где ты видишь в ЭТОМ моём высказывании слово "разыменовывание"? Здесь же про другое.

-третьих, я вот думаю, а не будет ли здесь UB (разыменовывание нулевого указателя)?

твоя фраза ?
это 1.
2. ты уводишь тему в разбор, что такое указатель. И ежу понятно, что указатель "имеет" и дестрвуктор, у него есть и прочее соответствующие методы по умолчанию, но память под это все выделяться не будет. т.к. скорее всего будет ссылаться на константную облаcть от типизированных nullptr. Хотя все это чисто для удобства в шаблонировании, и если тебе прилетает в шаблон в качестве template <typename T> void call(T ptr) { ...} using T = ObjectTypePtr*; // то можно вызывать ptr.~T(); //
к чему это обсуждать ? тема несколько вообще про джругое

R>Приведение к УКАЗАТЕЛЮ на объекты класса, в котором реализован статический метод, если говорить точнее. Результатом этого приведения является временный объект указателя соответствующего типа. Ещё раз: указатель — это объект, со всеми свойстами, присущими объектам (size, lifetime, storage duration). И размер указателя никак не меньше размера объекта пустой структуры. Скорее всего компилятор соптимизирует создание ненужных временных объектов (как указателя, так и объекта пустого класса), но это уже десятый вопрос.


Б>>В выражении ((std::numeric_limits<double>*)nullptr)->epsilon() никакой объект не будет инстанцирован.


R>Смотри выше. Бутет СОЗДАН объект указателя. И слово "инстанцирование" в С++ обозначает создание воплощений шаблонов, но никак не создание объектов.

) выше там про reflection по теме, нет у меня времени обсуждать вещи очевидные, инстанцияация шаблонов и инстанса объекта класса, вполне корректные высказывания же) а инстанс, он инстанциируется. Коечно вещи разные с инстанциацией шаблона

Б>>более близко выглядело бы ((std::numeric_limits<double>*)nullptr)->epsilon(), для статики.

Б>>разыменования здесь нет...
Б>>для перехода в точку можно было бы написать (*(std::numeric_limits<double>*)nullptr).epsilon(), но тут уже UB, потому я написал самое близкое и корректное к std::numeric_limits<double>::epsilon().

R>На чём основаны эти утверждения? Или ты написал это просто потому, что тебе хочется в это верить? Ну так я тебя огорчу, стандарт C++ утверждает другое:


R>https://timsong-cpp.github.io/cppwp/expr.ref#2


R>

R>The expression E1->E2 is converted to the equivalent form (*(E1)).E2; the remainder of [expr.ref] will address only the form using a dot.



R>Выражение E1->E2 ЭКВИВАЛЕНТНО выражению (*(E1)).E2

Это в теории, а на практике я встречал ситуации падение сразу после разыменования указателя. И в тоже время -> работал без проблем, даже с нестатическими методами, если в методе не было обращений к полям инстанса класса (невалидного).

R>(если только операторы '->' и '*' не являются перегруженными функциями). И из этой эквивалентности следует, что разыменовывание указателя имеет место быть в обоих случаях. На счёт UB я по-прежнему не уверен, могу только сказать точно, что оно либо есть в обоих случаях, либо его нет, тоже в обоих случаях.

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

R>Ну так я и писал только о тех двух операторах, о которых шла речь: https://rsdn.org/forum/cpp/9068221.1
Автор: B0FEE664
Дата: 19.03 18:07
. Это ты зачем-то приплёл сюда третий.

А может мне просто захотелось с тобой поговорить .. )) под знакомым тебе эккаунтом я не могу — заблочен, за
  термин
https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B3%D1%83%D0%BB%D1%8C

такое ))

Меня интересует когда, и как оно появится, уж очень хочется пощупать.