Здравствуйте, Roman Odaisky, Вы писали:
RO>std::cout << get_numeric_limits(&Data::n).max_value();
А почему это должно компилироваться, ведь Data::n — не статический мембер?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
V>Здравствуйте, Roman Odaisky, Вы писали:
RO>>std::cout << get_numeric_limits(&Data::n).max_value(); V>А почему это должно компилироваться, ведь Data::n — не статический мембер?
Результатом выражения &Data::n является особый тип указателя — указатель на член. Такой указатель можно использовать в комбинации с каким-либо объектом типа Data:
#include <iostream>
struct Data
{
int l;
int m;
int n;
};
int main()
{
Data data = {1, 2, 3};
int Data::*pointer_to_member;
pointer_to_member = &Data::l;
std::cout << data.*pointer_to_member << std::endl; //Output: 1
pointer_to_member = &Data::m;
std::cout << data.*pointer_to_member << std::endl; //Output: 2
pointer_to_member = &Data::n;
std::cout << data.*pointer_to_member << std::endl; //Output: 3
}
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Vain, Вы писали:
RO>>std::cout << get_numeric_limits(&Data::n).max_value(); V>А почему это должно компилироваться, ведь Data::n — не статический мембер?
&Data::n — это указатель на член, RTFM.
struct x
{
int a, b;
x(): a(), b()
{
}
};
typedef int x::*field_t;
int main()
{
x ab;
field_t p = &x::a;
ab.*p = 4;
p = &x::b;
ab.*p = 2;
std::cout << ab.a << ab.b << std::endl;
}
Здравствуйте, Roman Odaisky, Вы писали:
RO>>>std::cout << get_numeric_limits(&Data::n).max_value(); V>>А почему это должно компилироваться, ведь Data::n — не статический мембер? RO>&Data::n — это указатель на член, RTFM.
Я знал что это указатель на член и что это такое, просто не знал что он может именно так получаться.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]