В чем смысл этой комбинации оператора стрелки -> и оператора разрешения области ::? ⇐ C++
В чем смысл этой комбинации оператора стрелки -> и оператора разрешения области ::?
На cppreference.com – «Поиск полного имени» я нашел этот странный пример кода:
struct C { typedef int I; }; определение типа int I1, I2; внешний int *p, *q; // Небольшая модификация, чтобы предотвратить ошибку компоновщика //структура A { ~A(); }; структура А { ~А() {}; }; определение типа A AB; интервал основной() { р->C::I::~I(); // Имя I после ~ ищется в той же области видимости, что и раньше :: // (то есть в области C, поэтому он находит C::I) q->I1::~I2(); // Имя I2 ищется в той же области, что и I1 // (то есть из текущей области, поэтому он находит ::I2) АВ х; х.AB::~AB(); // Имя AB после ~ ищется в той же области, что и AB перед :: // (то есть из текущей области, поэтому он находит ::AB) } К моему удивлению, это компилируется без ошибок. Но что вообще происходит в очередях
p->C::I::~I(); q->I1::~I2(); ? Это не только похоже на доступ к членам переменных int и каким-то образом ссылается на деструктор int, но и на p и q также являются переменными extern без какого-либо определения.
Почему этот синтаксис разрешен и что он на самом деле делает?
На cppreference.com – «Поиск полного имени» я нашел этот странный пример кода:
struct C { typedef int I; }; определение типа int I1, I2; внешний int *p, *q; // Небольшая модификация, чтобы предотвратить ошибку компоновщика //структура A { ~A(); }; структура А { ~А() {}; }; определение типа A AB; интервал основной() { р->C::I::~I(); // Имя I после ~ ищется в той же области видимости, что и раньше :: // (то есть в области C, поэтому он находит C::I) q->I1::~I2(); // Имя I2 ищется в той же области, что и I1 // (то есть из текущей области, поэтому он находит ::I2) АВ х; х.AB::~AB(); // Имя AB после ~ ищется в той же области, что и AB перед :: // (то есть из текущей области, поэтому он находит ::AB) } К моему удивлению, это компилируется без ошибок. Но что вообще происходит в очередях
p->C::I::~I(); q->I1::~I2(); ? Это не только похоже на доступ к членам переменных int и каким-то образом ссылается на деструктор int, но и на p и q также являются переменными extern без какого-либо определения.
Почему этот синтаксис разрешен и что он на самом деле делает?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение