В C++, следующие строки у меня путать:Confused о преобразовании типов в C++
int temp = (int)(0×00);
int temp = (0×00int);
В чем разница между этими 2 строками?
В C++, следующие строки у меня путать:Confused о преобразовании типов в C++
int temp = (int)(0×00);
int temp = (0×00int);
В чем разница между этими 2 строками?
Оба являются недействительными, потому что вы используете ×
вместо 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 temp. Однако бросок здесь не нужен, вам не нужно бросать только потому, что константа написана в шестнадцатеричном формате. Вы можете просто написать:
int temp = 0x00;
Чтобы уточнить немного, второй оператор сообщает компилятору, что вы хотите присвоить «temp» некоторое значение. Использование префикса «0x» сообщает ему, что это значение будет выражено в HexaDecimal. Допустимые символы для шестнадцатеричного числа: 1234567890abcdef. Теперь вы должны увидеть проблему в своем заявлении. – Poni
Первый присвоит 0
к temp
Второй приведет к ошибке компиляции.
Когда сканер видит 0×
, он ожидает, что за ним следуют шестнадцатеричные цифры, но когда он видит i
, который не является допустимой шестнадцатеричной цифрой, он дает ошибку.
Первый принимает шестнадцатеричное значение 0x00 как int и использует его для инициализации переменной temp.
Вторая ошибка компиляции.
Первая строка является допустимым C++, который в основном приравнивают к
int temp = 0;
, а второй один не будет компилироваться (как это было предложено все здесь).
Способы бросить:
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 или в стиле функции».
Откуда у вас этот код? –
почему у вас возникло это сомнение? Int temp = (0 × 00int); '- why ???? – Vijay
еще одна вещь, которую я узнал сегодня. Хотя технически вы можете использовать «(int)» для ввода текста, C++-путь должен был бы написать «static_cast» –
thecoshman