2013-12-01 3 views
2

Есть ли способ выполнить то, что делает этот блок кода на C++ без использования typedef?Требуется ли это typedef?

typedef int* pointer; 
int a = 3; 
int* ap = &a; 
const pointer& apr = ap; 
*apr = 4; 

Это не будет делать это:

int b = 3; 
int* bp = &b; 
const int*& bpr = bp; 
*bpr = 4; 

В самом деле, что второй блок не будет компилироваться, потому что const делает BPR ссылки только для чтения указателя, а не константная ссылки на указатель чтения-записи. Я как бы надеялся, что скобки сохранят меня:

const (int*)& bpr = bp; 

... но не повезло. Итак, у меня есть, чтобы ввести тип указателя для создания ссылки const на указатель чтения-записи?

+0

Вы никогда не нуждаетесь в typedef. –

+0

@EdS., Я приглашаю вас ответить [этот] (http://stackoverflow.com/questions/20308716/how-to-write-a-c-conversion-operator-returning-reference-to-array). Пожалуйста, сделай. – chris

+0

@chris: Ницца! Исправлено: * «Вам очень редко нужен typedef» *. 10 лет, и я так и не оказался в такой ситуации. –

ответ

11

Используйте spiral rule:

int* const &bpr = bp; 

Это читается как BPR является ссылкой на постоянной указатель на междунар.

Для примера см. here.

Благодарим вас за dasblinkenlight за указание, что скобки в исходном ответе не требуются.

+0

Я думаю, что круглые скобки необязательны там ([link] (http://coliru.stacked-crooked.com/)). – dasblinkenlight

+0

@ dasblinkenlight, хорошая точка, спасибо. Я слишком привык вкладывать их туда со ссылками на массивы. – chris

+0

спасибо за примечание о правиле спирали. это то, что у вас там такое же, как создание ссылки const на указатель на int? – Robz

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