- 1
- 2
- 3
- 4
- 5
- 6
- 7
struct Counter{
static int k;
Counter(){ k++; }
~Counter() { k--; }
};
int Counter::k = 0;
#define LOL(x) {string s = #x; Counter c##x; cout<<s.substr(0,1+s.find('['))<<Counter::k<<"]="<<x<<'\n'; }
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+139
struct Counter{
static int k;
Counter(){ k++; }
~Counter() { k--; }
};
int Counter::k = 0;
#define LOL(x) {string s = #x; Counter c##x; cout<<s.substr(0,1+s.find('['))<<Counter::k<<"]="<<x<<'\n'; }
А ideone и константный ноль держит: http://ideone.com/MTtr7S.
VLA - это включенное по-умолчанию расширение gcc, придуманное для си. В кресты его тоже до кучи притащили.
Это будет талмуд на 2к страниц...
Если отбросить описание стандартной библиотеки, сейчас в стандарте около 400 страниц + несколько индексов, сокращённый пересказ грамматики и отличия от С.
Потому что и там, и там стандарт. А без знания стандартной либы начнут плодиться стандартные велосипеды.
То есть ведущие крестоводы тоже считают что подобный экстенсивный путь развития С++ — дорога в неконтролируемый сверхусложнённый ад?!
Ведь тут имеется такой немаловажный нюанс: с ростом числа фич, их сочетания растут как факториал, то есть практически экспоненциально.
И ни один человек каким бы он умным не был, ни один комитет гениев не сможет предусмотреть и просчитать взаимодействие фич друг с другом. Да что говорить о людях? Даже детерминированные машины Тьюринга не очень любят экспоненциальную сложность.
Потому какие дырки и нестыковки языка вылезут в каких-то аномальных комбинациях — никому доподлинно неизвестно.
http://govnokod.ru/17002#comment252791
К сожалению, часть крестопроблем возникает именно из-за паразитирования на сишном линкере.