Re[12]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: rg45 СССР  
Дата: 25.03.26 09:05
Оценка:
Здравствуйте, ботаныч, Вы писали:

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

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

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

Б>здесь приведение nullptr к типу, в котором реализован статический метод.


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

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


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

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

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

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

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

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.


Выражение E1->E2 ЭКВИВАЛЕНТНО выражению (*(E1)).E2 (если только операторы '->' и '*' не являются перегруженными функциями). И из этой эквивалентности следует, что разыменовывание указателя имеет место быть в обоих случаях. На счёт UB я по-прежнему не уверен, могу только сказать точно, что оно либо есть в обоих случаях, либо его нет, тоже в обоих случаях.

Б> Но самое забавное, что мы даже не это обсуждаем, мы обсуждаем совсем другую точку, которую предложил коллега B0FEE664.

Б>А именно точка времени компиляции со некими скрытыми итерабильными свойствами времени компиляции. А это немного другой оператор.

Ну так я и писал только о тех двух операторах, о которых шла речь: https://rsdn.org/forum/cpp/9068221.1
Автор: B0FEE664
Дата: 19.03 18:07
. Это ты зачем-то приплёл сюда третий.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 25.03.2026 10:21 rg45 . Предыдущая версия . Еще …
Отредактировано 25.03.2026 10:19 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 10:15 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 10:15 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:58 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:57 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:54 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:51 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:49 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:48 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:42 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:39 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:39 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:37 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:34 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:21 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:16 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:15 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:13 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:06 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.