Сообщение Re[13]: так компайл тайм рефлекшину быть 26-й стандарт ?? от 25.03.2026 11:23
Изменено 25.03.2026 11:29 ботаныч
Re[13]: так компайл тайм рефлекшину быть 26-й стандарт ??
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, ботаныч, Вы писали:
R>>>Во-вторых, здесь тоже будет создан "инстанс", т.к. указатель — это тоже объект (нулевой указатель в т.ч).
Б>> разыменования здесь нет.
R>??? Где ты видишь в ЭТОМ моём высказывании слово "разыменовывание"? Здесь же про другое.
это 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>Выражение E1->E2 ЭКВИВАЛЕНТНО выражению (*(E1)).E2
Это в теории, а на практике я встречал ситуации падение сразу после разыменования указателя. И в тоже время -> работал без проблем, даже с нестатическими методами, если в методе не было обращений к полям инстанса класса (невалидного).
R>(если только операторы '->' и '*' не являются перегруженными функциями). И из этой эквивалентности следует, что разыменовывание указателя имеет место быть в обоих случаях. На счёт UB я по-прежнему не уверен, могу только сказать точно, что оно либо есть в обоих случаях, либо его нет, тоже в обоих случаях.
Ага, особенно если посадят куда-то внутрь клауд системы, и ты свою утилзу будешь запускать на каких-то экзотических стойках с такими-же экзотическими процами.
R>Ну так я и писал только о тех двух операторах, о которых шла речь: https://rsdn.org/forum/cpp/9068221.1
А может мне просто захотелось с тобой поговорить .. )) под знакомым тебе эккаунтом я не могу — заблочен, за https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B3%D1%83%D0%BB%D1%8C
такое ))
Меня интересует когда, и как оно появится, уж очень хочется пощупать.
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
. Это ты зачем-то приплёл сюда третий.Дата: 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>??? Где ты видишь в ЭТОМ моём высказывании слово "разыменовывание"? Здесь же про другое.
это 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>Выражение E1->E2 ЭКВИВАЛЕНТНО выражению (*(E1)).E2
Это в теории, а на практике я встречал ситуации падение сразу после разыменования указателя. И в тоже время -> работал без проблем, даже с нестатическими методами, если в методе не было обращений к полям инстанса класса (невалидного).
R>(если только операторы '->' и '*' не являются перегруженными функциями). И из этой эквивалентности следует, что разыменовывание указателя имеет место быть в обоих случаях. На счёт UB я по-прежнему не уверен, могу только сказать точно, что оно либо есть в обоих случаях, либо его нет, тоже в обоих случаях.
Ага, особенно если посадят куда-то внутрь клауд системы, и ты свою утилзу будешь запускать на каких-то экзотических стойках с такими-же экзотическими процами.
R>Ну так я и писал только о тех двух операторах, о которых шла речь: https://rsdn.org/forum/cpp/9068221.1
А может мне просто захотелось с тобой поговорить .. )) под знакомым тебе эккаунтом я не могу — заблочен, за
такое ))
Меня интересует когда, и как оно появится, уж очень хочется пощупать.
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
. Это ты зачем-то приплёл сюда третий.Дата: 19.03 18:07
А может мне просто захотелось с тобой поговорить .. )) под знакомым тебе эккаунтом я не могу — заблочен, за
| термин | |
| https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B3%D1%83%D0%BB%D1%8C | |
такое ))
Меня интересует когда, и как оно появится, уж очень хочется пощупать.