Смущен преобразованием типов в C ++ - PullRequest
0 голосов
/ 30 марта 2010

В C ++ меня перепутали следующие строки:

int temp = (int)(0×00);

int temp = (0×00int);

В чем разница между этими двумя строками?

Ответы [ 5 ]

12 голосов
/ 30 марта 2010

Оба недействительны, потому что вы используете × вместо x:

test.cpp:6: error: stray '\215' in program
test.cpp:6: error: expected primary-expression before "int"
test.cpp:6: error: expected `)' before "int"

Но даже исправляя это, второй по-прежнему не подходит для C ++, потому что вы не можете написать 0x00int:

test.cpp:6:13: invalid suffix "int" on integer constant

Первый действителен (после изменения × на x) и присваивает значение 0 для температуры. Однако приведение здесь не нужно - вам не нужно приводить только потому, что константа записана в шестнадцатеричном формате. Вы можете просто написать:

int temp = 0x00;
3 голосов
/ 30 марта 2010

Способы сотворения:

int temp = (int)0x00;  // Standard C-style cast
int temp = int(0x00);  // Function-style cast
int temp = static_cast<int>(0x00);  // C++ style cast, which is clearer and safer
int temp = reinterpret_cast<int>("Zero"); // Big-red-flag style unsafe cast

Самое интересное в static_cast и reinterpret_cast в том, что хороший компилятор предупредит вас, если вы используете их неправильно, по крайней мере, в некоторых сценариях.

Например, Visual Studio 2005 выдаст ошибку, если вы попытаетесь повторно интерпретировать 0x00 в int, потому что это преобразование доступно безопасным способом. Фактическое сообщение: «Преобразование является допустимым стандартным преобразованием, которое может быть выполнено неявно или с использованием static_cast, приведения типа C или приведения в стиле функции».

1 голос
/ 30 марта 2010

Первый принимает шестнадцатеричное значение 0x00 как int и использует его для инициализации переменной temp.

Вторая ошибка компиляции.

1 голос
/ 30 марта 2010

Первый назначит 0 на temp

Секунда приведет к ошибке компиляции.

Когда сканер видит , он ожидает, что за ним следуют шестнадцатеричные цифры, но когда он видит i, который не является действительным шестнадцатеричным числом, он выдает ошибку.

0 голосов
/ 30 марта 2010

Первая строка - это правильный C ++, который в основном равен

int temp = 0; 

в то время как второй не удастся скомпилировать (как предлагают все здесь).

...