Не могу понять
От: Аноним  
Дата: 28.10.04 10:11
Оценка:
vector<BYTE> buff;

unsigned short cmdNum = reinterpret_cast<unsigned short &>(*(&buff[10]));

Что в этой строке делается, зачем такие сложности *& — они же отменяют друг друга? Спасибо
Re: Не могу понять
От: _nn_ www.nemerleweb.com
Дата: 28.10.04 10:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>vector<BYTE> buff;


А>unsigned short cmdNum = reinterpret_cast<unsigned short &>(*(&buff[10]));


А>Что в этой строке делается, зачем такие сложности *& — они же отменяют друг друга? Спасибо


Тоже не ясно, получение значения с последущим взятием адреса элемента, чтобы потом получить значение опять, а потом преобразование которое и так произойдет неявно, да еще и в ссылку, то что здесь нет смысла делать.
Может чтобы никто не догадался что этот код делает ?

Можно проще :
vector<BYTE> buff;
//...
unsigned short cmdNum = buff[10];
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Не могу понять
От: Lorenzo_LAMAS  
Дата: 28.10.04 10:37
Оценка:
Я так понимаю, что у тебя то 1 байт возьмется, а в примере 2.
Of course, the code must be complete enough to compile and link.
Re: Не могу понять
От: Lorenzo_LAMAS  
Дата: 28.10.04 10:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>vector<BYTE> buff;


А>unsigned short cmdNum = reinterpret_cast<unsigned short &>(*(&buff[10]));


А>Что в этой строке делается, зачем такие сложности *& — они же отменяют друг друга? Спасибо


Замени *(&buff[10]) на buff[10]
и тогда вроде понятнее будет

reinterpret_cast<unsigned short &>(buff[10])
Of course, the code must be complete enough to compile and link.
Re: Не могу понять
От: TheBeard Россия  
Дата: 28.10.04 10:42
Оценка:
vector[10] возвращает объект allocator::reference (или
allocator::const_reference), который (вообще говоря) может
переопределять оператор & для получения указателя на элемент.

wrote:

> vector<BYTE> buff;

>
> unsigned short cmdNum = reinterpret_cast<unsigned short
> &>(*(&buff[10]));
>
> Что в этой строке делается, зачем такие сложности *& — они же
> отменяют друг друга? Спасибо
Posted via RSDN NNTP Server 1.9 gamma
Re[3]: Не могу понять
От: _nn_ www.nemerleweb.com
Дата: 28.10.04 10:43
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Я так понимаю, что у тебя то 1 байт возьмется, а в примере 2.


Возможно это то что хотелось, но в примере будет только 1 байт как я понимаю.

buff[10] — unsigned char
&buff[10] — unsigned char*
*(&buff[10]) — unsigned char
reinterpret_cast<unsigned short &>(*(&buff[10])) -> reinterpret_cast<unsigned short &>(unsigned char) -> unsigned char.

А вот если хотелось чтобы было 2 байта то надо было бы так:
unsigned short cmdNum = *(reinterpret_cast<unsigned short*>(&buff[10]));


Или я неправ ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: Не могу понять
От: Анатолий Широков СССР  
Дата: 28.10.04 10:46
Оценка: 4 (1)
__>Возможно это то что хотелось, но в примере будет только 1 байт как я понимаю.

__>buff[10] — unsigned char&

__>&buff[10] — unsigned char*
__>*(&buff[10]) — unsigned char&
Re[4]: Не могу понять
От: Lorenzo_LAMAS  
Дата: 28.10.04 10:46
Оценка: 4 (1)
Не, неправ. Посмотри такое

#include <iostream>

int main()
{
    unsigned char uc[] = {0xff, 0xff, 0xaa, 0xaa};
    unsigned short us = reinterpret_cast<unsigned short &>(uc[2]);//или *(&uc[2])
    unsigned short us2 = uc[2];
    std::cout<<std::hex<<us<<' '<<us2<<std::endl;
}
Of course, the code must be complete enough to compile and link.
Re[5]: Не могу понять
От: _nn_ www.nemerleweb.com
Дата: 28.10.04 10:47
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

__>>Возможно это то что хотелось, но в примере будет только 1 байт как я понимаю.


__>>buff[10] — unsigned char&

__>>&buff[10] — unsigned char*
__>>*(&buff[10]) — unsigned char&
Да точно, там ссылка, а не значение.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.