- 1
- 2
- 3
- 4
- 5
- 6
- 7
Уважаемые знатоки, вопрос такой:
sizeof('a') для С и Сpp имеет различное значение и это вам известно из
C99 Standard: 6.4.4.4 Character constants Para 2
и
C++03 Standard: 2.13.2 Character literals Para 1.
Интересует ваше предположение/мнение/версия/etc, для чего такое приняли?
вышеописанный пример - чистой воды сиблядство
http://ideone.com/GDrwT
http://ideone.com/qNQsi
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.
Что не так?
http://ideone.com/N4GrL
P.S. gcc даже без -Wall ругается на мультибайтовые символы, т.к. они скорее всего будут работать не так, как планировал автор...
См. цитату из стандарта выше - sizeof определен и равен sizeof(int), не определено только его значение...
P.S. Сама необходимость этих multicharacter literals под сомнением (кроме, конечно, случая с префиксом L - к примеру, L'ы', если текущая кодировка utf-8).
lolchto?
Это строки времени компиляции.
Лолчто? Разработчики стандарта явно не для этого извращения их придумали...
P.S. Да и не было бы их - запилили бы как mpl::string<'k', 'o', 'k', 'o', 'k', 'o'>. Я имел в виду вменяемые применения, а не для троллинга компайл-тайм строками, порезанными на платформозависимое число групп.
http://liveworkspace.org/code/d73d9dac60a5689018b315b7584698bd
http://liveworkspace.org/code/1b2c1f015793bdb1355105d0cbdcc1f1
Как пример типы long и void*. Т.е. длинное целое и указатель.
Эти типы имеют одинаковый размер (4 на моей системе) и с перегрузкой проблем не вызывают.
только вот в си 'a' это int, а не char
поэтому f('a') вызовет f(int), а не f(char)
Ну тогда bormand бправ.
Т. е. в никаких сишных операция это ни на что не влияет — пусть будет интом.
Поэтому, плюсовая версия с перегрузкой функций кажется адекватной - непосредственная необходимость.