Собственно вопрос: почему компилируется:
int i = 'ab';
Как вообще может пропускаться компилятором 'ab' и почему эта штука воспринимается именно как int?
Компилятор MS VS 2008. Так и должно быть по стандарту или студия не права?
Попробовал еще вот так:
int i = '\x5\x1\x0\x0';
Тут в i записывается 261. Я так понял, что это единица даёт 256 + 5. Это такая фишка языка для побайтового указания целых чисел?
Здравствуйте, Аноним, Вы писали:
2.13.2/1
A character literal is one or more characters enclosed in single quotes, as in ’x’, optionally preceded by the letter L, as in L’x’. A character literal that does not begin with L is an ordinary character literal, also referred to as a narrow-character literal. An ordinary character literal that contains a single c-char has type char, with value equal to the numerical value of the encoding of the c-char in the execution character set.
An ordinary character literal that contains more than one c-char is a multicharacter literal. A multicharacter literal has type int and implementation-defined value.
B>B>An ordinary character literal that contains more than one c-char is a multicharacter literal. A multicharacter literal has type int and implementation-defined value.
Блин, век живи — век учись!
А нафига они вообще такой синтаксис сделали?
Т.е. зачем реально нужен такой литерал с несколькими символами?
Здравствуйте, Шебеко Евгений, Вы писали:
B>>B>>An ordinary character literal that contains more than one c-char is a multicharacter literal. A multicharacter literal has type int and implementation-defined value.
ШЕ>Блин, век живи — век учись!
ШЕ>А нафига они вообще такой синтаксис сделали?
ШЕ>Т.е. зачем реально нужен такой литерал с несколькими символами?
В некоторых форматах файлов часто используются четырехбайтовые сигнатуры из букв, типа FourCC кодов в avi файлах. Такой литерал удобен тем, что compile-time константа целочисленного типа (можно в switch использовать) и тем, что без \0 в конце.
Другое дело, что "implementation-defined value" предотвращает от использования их в переносимом коде.
AG>В некоторых форматах файлов часто используются четырехбайтовые сигнатуры из букв, типа FourCC кодов в avi файлах. Такой литерал удобен тем, что compile-time константа целочисленного типа (можно в switch использовать) и тем, что без \0 в конце.
AG>Другое дело, что "implementation-defined value" предотвращает от использования их в переносимом коде.
Как-то всё же странно из-за такой ерунды лепить такое в язык.
У меня было предположение, что может это с восточными языками связано.
Типа simplified china.
int i = 'a';
работает, почему бы не сделать 'ab' ?