Здравствуйте, ботаныч, Вы писали:
Б>Здравствуйте, 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 не используется даже формально.
--
Справедливость выше закона. А человечность выше справедливости.