- 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, для чего такое приняли?
TarasB 15.07.2012 11:47 # +5
defecate-plusplus 15.07.2012 13:22 # +11
вышеописанный пример - чистой воды сиблядство
TarasB 15.07.2012 17:27 # +2
HaskellGovno 15.07.2012 13:38 # +4
http://ideone.com/GDrwT
rdifb0 15.07.2012 14:11 # 0
HaskellGovno 15.07.2012 14:20 # +1
http://ideone.com/qNQsi
bormand 15.07.2012 14:28 # +2
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.
Что не так?
bormand 15.07.2012 14:36 # +2
http://ideone.com/N4GrL
P.S. gcc даже без -Wall ругается на мультибайтовые символы, т.к. они скорее всего будут работать не так, как планировал автор...
USB 15.07.2012 14:41 # 0
bormand 15.07.2012 14:50 # 0
См. цитату из стандарта выше - sizeof определен и равен sizeof(int), не определено только его значение...
P.S. Сама необходимость этих multicharacter literals под сомнением (кроме, конечно, случая с префиксом L - к примеру, L'ы', если текущая кодировка utf-8).
USB 15.07.2012 15:01 # 0
lolchto?
Это строки времени компиляции.
bormand 15.07.2012 15:09 # 0
Лолчто? Разработчики стандарта явно не для этого извращения их придумали...
P.S. Да и не было бы их - запилили бы как mpl::string<'k', 'o', 'k', 'o', 'k', 'o'>. Я имел в виду вменяемые применения, а не для троллинга компайл-тайм строками, порезанными на платформозависимое число групп.
bormand 15.07.2012 15:29 # 0
http://liveworkspace.org/code/d73d9dac60a5689018b315b7584698bd
http://liveworkspace.org/code/1b2c1f015793bdb1355105d0cbdcc1f1
USB 15.07.2012 17:22 # 0
bormand 15.07.2012 15:36 # +3
Fai 15.07.2012 16:37 # 0
Как пример типы long и void*. Т.е. длинное целое и указатель.
Эти типы имеют одинаковый размер (4 на моей системе) и с перегрузкой проблем не вызывают.
defecate-plusplus 15.07.2012 16:41 # +2
только вот в си 'a' это int, а не char
поэтому f('a') вызовет f(int), а не f(char)
Fai 15.07.2012 16:47 # 0
Ну тогда bormand бправ.
sayidandrtfm 15.07.2012 17:31 # +2
Т. е. в никаких сишных операция это ни на что не влияет — пусть будет интом.
Поэтому, плюсовая версия с перегрузкой функций кажется адекватной - непосредственная необходимость.