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

Сообщение Re[10]: так компайл тайм рефлекшину быть 26-й стандарт ?? от 24.03.2026 9:39

Изменено 24.03.2026 10:31 rg45

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

Б>Здравствуйте, rg45, Вы писали:


Б>привет.


R>>Причём, через "точку" можно обращаться в т.ч. и к статическим членам классов (главное, чтоб слева от точки было выражение, вычисляющееся в объект). Например: std::true_type{}.value — это обращение к статическому члену std::true_type::value. Или std::numeric_limits<double>{}.epsilon() — то же самое, что std::numeric_limits<double>::epsilon().


Б> чисто формально std::numeric_limits<double>{}.epsilon() — здесь будет создан инстанс, по моему мнению. в отличии от ::


Разумеется, будет создан инстанс, по-моему, я и сам это ясно это обозначил: "главное, чтоб слева от точки было выражение, вычисляющееся в объект".

Хорошо, "то же самое" зачёркриваем. Оставляем только: "через оператор доступа к членам (точку) можно доступаться не только к инстансным, но и к статическим членам". Это было главной мыслью, которую я высказал для полноты картины использования этих двух операторов.

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


Во-первых, это уже другой оператор (->), о котором и речи не шло изначально. Во-вторых, здесь тоже будет создан "инстанс", т.к. указатель — это тоже объект (нулевой указатель в т.ч). Во-третьих, это просто UB (разыменовывание нулевого указателя). Хотя тут не уверен (доступа к области памяти, занимаемой объектом нет, this не используется даже формально).
Re[10]: так компайл тайм рефлекшину быть 26-й стандарт ??
Здравствуйте, ботаныч, Вы писали:

Б>Здравствуйте, rg45, Вы писали:


Б>привет.


R>>Причём, через "точку" можно обращаться в т.ч. и к статическим членам классов (главное, чтоб слева от точки было выражение, вычисляющееся в объект). Например: std::true_type{}.value — это обращение к статическому члену std::true_type::value. Или std::numeric_limits<double>{}.epsilon() — то же самое, что std::numeric_limits<double>::epsilon().


Б> чисто формально std::numeric_limits<double>{}.epsilon() — здесь будет создан инстанс, по моему мнению. в отличии от ::


Разумеется, будет создан инстанс, по-моему, я и сам это ясно это обозначил: "главное, чтоб слева от точки было выражение, вычисляющееся в объект".

Хорошо, "то же самое" зачёркриваем. Оставляем только: "через оператор доступа к членам (точку) можно доступаться не только к инстансным, но и к статическим членам". Это было главной мыслью, которую я высказал для полноты картины использования этих двух операторов.

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


Во-первых, это уже другой оператор (->), о котором и речи не шло изначально. Во-вторых, здесь тоже будет создан "инстанс", т.к. указатель — это тоже объект (нулевой указатель в т.ч). Выигрыш по сравнению с созданием объекта пустой структуры сомнителен. Во-третьих, это просто UB (разыменовывание нулевого указателя). Хотя тут не уверен (доступа к области памяти, занимаемой объектом нет, this не используется даже формально).