LINUX.ORG.RU

cast types gcc 4


0

0

nick@nick:/tmp> cat test.cpp
main()
{
    char * x;
    int i = static_cast<int>(x);
}
nick@nick:/tmp> gcc test.cpp
test.cpp: In function &#8216;int main()&#8217;:
test.cpp:4: error: invalid static_cast from type &#8216;char*&#8217; to type &#8216;int&#8217;
nick@nick:/tmp> uname -a
Linux nick 2.6.16.13-4-default #1 Wed May 3 04:53:23 UTC 2006 x86_64 x86_64 x86_64 GNU/Linux
nick@nick:/tmp>       
anonymous

gcc --version
gcc (GCC) 4.1.0 (SUSE Linux)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

nick@nick:/tmp>

anonymous
()

И очень правильно ругается. static_cast допускается, если объект типа, полученного после преобразования, может быть инициализирован значением исходного типа, или приведение типа соответствует одному из исключений (не тот случай).

Если хочешь таки преобразовать char * к int, используй reinterpret_cast<>(). Например так:

char * x;

int i = reinterpret_cast<int>(x);

Но вообще-то такие преобразования типов - великая ересь.

Sectoid ★★★★★
()
Ответ на: комментарий от frame

nick@nick:/tmp> cat test.cpp
main()
{
    char * x;
    int i = reinterpret_cast<int>(x);
}
nick@nick:/tmp> gcc test.cpp
test.cpp: In function &#8216;int main()&#8217;:
test.cpp:4: error: cast from &#8216;char*&#8217; to &#8216;int&#8217; loses precision
nick@nick:/tmp>

anonymous
()
Ответ на: комментарий от anonymous

Ты, видимо, 64битный бинарник собираешь, если у тебя char * != int. Попробуй long i.

Motl
()
Ответ на: комментарий от anonymous

> Да мне пох на потерю данных как привести?

int i = *(reinterpret_cast<int*>(&x));

jek_
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.