совмещение типов и подобные типы - PullRequest
2 голосов
/ 07 октября 2019

На cpp reference говорят, что два указателя одинаковы, если игнорируя квалификаторы cv верхнего уровня, они указывают на один и тот же тип. Тогда в примерах есть этот пример

int (* const *)(int *) and int (* volatile *)(int *) are similar; 

Мне было интересно, как они должны быть похожими? AFAIK, те, которые представляют указатель на указатель на функцию, чтобы упростить их, можно переписать как

 using XYZ = int(*)(int *);
 const XYZ *;     // A
 volatile XYZ *;  // B

Разве в этом случае не указатели A и B на разные типы?

1 Ответ

2 голосов
/ 07 октября 2019

В отношении cpp говорится, что два указателя одинаковы, если игнорируя квалификаторы cv верхнего уровня, они указывают на один и тот же тип

Не совсем. В нем говорится:

Неформально два типа похожи, если, игнорируя cv-квалификацию верхнего уровня:

  • они одного типа;или

  • они оба указатели, а указываемые типы похожи;или

Обратите внимание, что то же отличается от аналогично .


const XYZ *;     // A
volatile XYZ *;  // B

Разве A и B не указывают на разные типы в этом случае?

Они действительно разные типы. Но они похожи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...