LINUX.ORG.RU

C++ const_cast<> or static_cast<>


0

0

invalid conversion from `const char*' to `char*
Видели наверное многие?
Вызываю я функцию и передаю параметром std::string.
Пример : 
std::string param; 
sys_func ( param.c_str() ); 
Но тогда будет несоответствие типов. Если
(char *)param.c_str() - то все ок. Но это С метод.
А С++ как будет правильнее? 
const_cast<char *>(param.c_str())
или же
static_cast<char *>(param.c_str())
anonymous

Ответ на: комментарий от Selecter

В догонку : std::string strBuf = "fdsf" const_cast<u_char *>(strBuf.c_str()); invalid const_cast from type `const char*' to type `u_char*'

Но (u_char *)strBuf.c_str() идет на ура. Почему?

anonymous
()

>const_cast<char *>(param.c_str())
>или же
>static_cast<char *>(param.c_str())

Вобще для избавления от const надо пользваться const_cast.

Но лучше этого все равно не делать.
А если очень хочется, то создать временный массив, скопировать в него содержимое строки и его передать в функцию. 

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

потому что (u_char *)strBuf.c_str() аналогично reinterpet_cast<u_char*>(strBuf.c_str()). Он сконвертирует всечто угодно во все что угодно. А static_cast выполняет некие проверки на соотвествие типов.

Vinick ★★
()

Имей ввиду, что const_cast - это достаточно злой хак.

И совсем не факт, что std::string нормально обработает изменения в буфере, который никто, кроме неё, менять не должен.

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