this
никогда не может быть nullptr
, иначе это UB. int
никогда не переполняется, иначе это UB. Понятие UB позволяет очень жестко оптимизировать код. Еще к таким асимптотическим правкам относится удаление неиспользуемых объектов, участков недостижимого кода, развертка циклов или свертка планарных конструкций. Эти оптимизации не отключаются, т.к. они заложены в сам язык, в процесс трансляции. Еще к таким оптимизациям относится перестановка блоков бинарного кода для случаев, когда результат не меняется, а вот бранчинг кода резко снижается.#include
может привести к увеличению времени трансляции до +20%. Т.н. "include guard"-ы [?] спокойно увеличивают время трансляции до +5..10%. Любая эвристика с логарифмической трудоемкостью в шаблонах и при обильном использовании приводит к увеличению времени трансляции до +8%.$ echo '#include <stdio.h>' > test.c
$ gcc -E test.c|wc -l
725