2015-11-15 4 views
1

У меня есть порт код C++ и нашел этот странный ЬурейеЕ:C++ ЬурейеЕ с странным Оператор разрешения области

typedef uint32_t SomeClassName::* ptr; 

Мишень компилятор MSVC++. Насколько я понимаю, это просто создает псевдоним для uint32_t* с именем ptr. Часть с SomeClassName:: не делает ничего полезного и должна рассматриваться как ошибка совместимого компилятора C++. Я прав или неправ?

Также найдено Unusual scope resolution operator вопрос о том, что, возможно, ответит на этот вопрос, но я не уверен в этом.

+0

Возможно ли это указатель на член? Я не совсем знаком с синтаксисом, это запутывает – Kevin

ответ

2

Это указатель на член. В частности, переменная типа ptr может указывать на любой элемент данных uint32_tSomeClassName. Его можно использовать следующим образом:

struct Foo { 
    int a; 
    int b; 
    float c; 
}; 

Foo foo; 
int Foo::* ptr; 

ptr = &Foo::a; 
foo.*ptr = 10; //Set foo.a to 10 

ptr = &Foo::b; 
foo.*ptr = 15; //Set foo.b to 15 

//ptr = &Foo::c; //Won't compile 
+0

Спасибо! C++ никогда не перестанет удивляться мне :) – actual

Смежные вопросы