Re: static_cast<char*>
От: chemey  
Дата: 17.06.11 11:13
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>string str = static_cast<char*>buffer; // error: invalid static_cast from type 'byte*' to type 'char*'


А>почему преобразование типов не работает?


Видимо, потому, что считает типы несовместимыми.

А>Как быть в этой ситуации?


reinterpret_cast, C-style cast.
Бзззззззжжжжж
static_cast<char*>
От: Аноним  
Дата: 17.06.11 10:51
Оценка:
byte* buff = new byte[1000];
.....
заполнение
.....


string str = static_cast<char*>buffer; // error: invalid static_cast from type 'byte*' to type 'char*'


почему преобразование типов не работает?
Как быть в этой ситуации?
Re: static_cast<char*>
От: Erop Россия  
Дата: 17.06.11 11:22
Оценка:
Здравствуйте, Аноним, Вы писали:


А>byte* buff = new byte[1000];


А>почему преобразование типов не работает?

А>Как быть в этой ситуации?


Кто такой byte и как он определён? Как unsigned char?
Если так, то зачем его тут юзать вообще?
Сразу аллокируй буфер char и не страдай...

Кстати, зачем по new?
Есть целых два варианта лучше

1) На стеке
char buffer[ 1000 ];

2) RAII:
std::vector<char> buffer( 1000 );
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: static_cast<char*>
От: dilmah США  
Дата: 17.06.11 11:28
Оценка:
А>Как быть в этой ситуации?

либо реинтерпрет, либо static_cast<char*>(static_cast<void*>(p))
Re[2]: static_cast<char*>
От: jyuyjiyuijyu  
Дата: 17.06.11 21:07
Оценка:
Здравствуйте, dilmah, Вы писали:

А>>Как быть в этой ситуации?


D>либо реинтерпрет, либо static_cast<char*>(static_cast<void*>(p))

static_cast<char*>(static_cast<void*>(p))
это не ССЗБ ? я бы постеснялся показать код с таким чудом кому то
как минимум си стайл и то лучше ЭТОГО
Re[3]: static_cast<char*>
От: dilmah США  
Дата: 17.06.11 21:42
Оценка:
J>как минимум си стайл и то лучше ЭТОГО

что значит "и то"?
си стайл эквивалентен реинтерпрет_каст (в данном случае)
Re[4]: static_cast<char*>
От: jyuyjiyuijyu  
Дата: 17.06.11 21:54
Оценка:
Здравствуйте, dilmah, Вы писали:


J>>как минимум си стайл и то лучше ЭТОГО


D>что значит "и то"?

D>си стайл эквивалентен реинтерпрет_каст (в данном случае)
"и то" значит намного менее уродливо выглядит и меньше буковок набирать
Re[5]: static_cast<char*>
От: dilmah США  
Дата: 17.06.11 22:06
Оценка:
J>"и то" значит намного менее уродливо выглядит и меньше буковок набирать

ну в таком случае "и то" все равно не уместно. Си стайл каст, наоборот, самый короткий и красивый
Re[6]: static_cast<char*>
От: jyuyjiyuijyu  
Дата: 17.06.11 22:12
Оценка:
Здравствуйте, dilmah, Вы писали:


J>>"и то" значит намного менее уродливо выглядит и меньше буковок набирать


D>ну в таком случае "и то" все равно не уместно. Си стайл каст, наоборот, самый короткий и красивый

поэтому и "и то" что хоть все в него плюются в плюсах он в этом куске был бы к месту
(потому что самый короткий и красивый)
простите за тафталогию
Re[7]: static_cast<char*>
От: breee breee  
Дата: 18.06.11 06:36
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>Здравствуйте, dilmah, Вы писали:



J>>>"и то" значит намного менее уродливо выглядит и меньше буковок набирать


D>>ну в таком случае "и то" все равно не уместно. Си стайл каст, наоборот, самый короткий и красивый

J>поэтому и "и то" что хоть все в него плюются в плюсах он в этом куске был бы к месту
J>(потому что самый короткий и красивый)
J>простите за тафталогию

Си стайл может и более "красивый", но незаметный, небезопасный и коварный — пропустишь звездочку, а он проглотит.

Я как-то использовал что-то подобное
template<class R, class T>
R* pointer_cast(T* pointer)
{
    return static_cast<R*>(static_cast<void*>(pointer));
}

int main()
{
    typedef unsigned char byte;

    byte* pByte = 0;
    char* pChar = 0;

    pChar = pointer_cast<char>(pByte);
}
Re[8]: static_cast<char*>
От: dilmah США  
Дата: 18.06.11 06:44
Оценка:
BB>Си стайл может и более "красивый", но незаметный, небезопасный и коварный — пропустишь звездочку, а он проглотит.

в данном случае он сравнивался с реинтерпрет_каст, который точно так же ее проглотит

BB> return static_cast<R*>(static_cast<void*>(pointer));


ну так я выше то же самое написал -- мне ответили, что постеснялись бы это кому-нибудь показать
Видимо, стеснение определяется тем, использовал ли данную конструкцию какой-нибудь авторитет, либо нет
Re[9]: static_cast<char*>
От: breee breee  
Дата: 18.06.11 07:01
Оценка:
Здравствуйте, dilmah, Вы писали:


BB>>Си стайл может и более "красивый", но незаметный, небезопасный и коварный — пропустишь звездочку, а он проглотит.


D>в данном случае он сравнивался с реинтерпрет_каст, который точно так же ее проглотит


А мне показалось, что jyuyjiyuijyu сравнивал c-cast с двумя static_cast'ами

static_cast<char*>(static_cast<void*>(p))
это не ССЗБ ? я бы постеснялся показать код с таким чудом кому то
как минимум си стайл и то лучше ЭТОГО


BB>> return static_cast<R*>(static_cast<void*>(pointer));


D>ну так я выше то же самое написал -- мне ответили, что постеснялись бы это кому-нибудь показать

Я заметил, именно поэтому привел пример как можно сократить запись до pointer_cast, сохранив при этом статические проверки статик_каста.


D>Видимо, стеснение определяется тем, использовал ли данную конструкцию какой-нибудь авторитет, либо нет
Re[9]: static_cast<char*>
От: jyuyjiyuijyu  
Дата: 18.06.11 07:04
Оценка:
Здравствуйте, dilmah, Вы писали:


BB>>Си стайл может и более "красивый", но незаметный, небезопасный и коварный — пропустишь звездочку, а он проглотит.


D>в данном случае он сравнивался с реинтерпрет_каст, который точно так же ее проглотит


BB>> return static_cast<R*>(static_cast<void*>(pointer));


D>ну так я выше то же самое написал -- мне ответили, что постеснялись бы это кому-нибудь показать

D>Видимо, стеснение определяется тем, использовал ли данную конструкцию какой-нибудь авторитет, либо нет
ну это образно постеснялся бы показывать конечно
страшенький такой кастинг надо признатся я привык к сишному
а сейчас учу сипипи но все еще использую си стайл привычка
да и лень набирать reinterpret_cast и выглядит ужасно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.