- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
switch (a) {
case 12345:
return 0;
case 14523:
return 1;
case 102543:
return 2;
case 104325:
return 3;
case 243051:
return 4;
case 245130:
return 5;
case 350214:
return 6;
case 351402:
return 7;
case 423150:
return 8;
case 425031:
return 9;
case 530412:
return 10;
case 531204:
return 11;
}
return -1;
(a/10000)*2 + (((a/1000)%10) == 1 ||((a/1000)%10) >3)?1:0;
Фтопку.
}
А есть другие примеры опасного кода, не выдающего ворнинги?
https://msdn.microsoft.com/en-us/library/7hw7c1he.aspx
Круче по операциям только лукап в таблице по n / 1000, но не факт, что исполнится лучше -- один джамп по указателю из памяти в непредсказуемое место и два обычных джампа или всё-таки пять обычных джампов.
http://goo.gl/Yim0ZY
То есть, гарантий никаких не дается и по сути это столь любимое бормондом UB?
ещё блять не хватало, чтобы в стандарте навязывалась реализация свича или ограничивалась работа duff device
Например, для какого-нибудь switch (a) { case 1: return 2; case 2: return 3; case 3: return 4; default: return -1; } вполне соответствовать стандарту будет превращение в return 1 <= a && a <= 3 ? a+1 : -1;
И даже про вычислительную сложность сложения, умножения и деления там нет ни слова.
Например, знаю кучу людей, у которых был первым языком питон, и которые второй минимум в массиве ищут сортировкой. И даже не задумываются, что что-то тут не так.
>у которых был первым языком питон
Зачем ты так...
>и которые второй минимум в массиве ищут сортировкой
А чо такое? O(n*logn ) же
2) Про студию/гцц/шланг доподлинно известно, что они свитч оптимизируют. А это 99,99% платформ. ICC, у которого вся писечка в оптимизациях, тоже наверняка делает настолько быстрый свитч, насколько возможно.
3) Нужно верить в свой компилятор. Это один из столпов с++.
Нужно верить в Штольмана и трухвальца - это один из столпов прыщей.
доволен?