Имам някои доста скъпи static_assert
повиквания, разпръснати из моя код. Въпреки че те са ценни, те често са излишни и значително допринасят за времето за компилиране и използването на паметта.
Мога ли да ги деактивирам?
Имам някои доста скъпи static_assert
повиквания, разпръснати из моя код. Въпреки че те са ценни, те често са излишни и значително допринасят за времето за компилиране и използването на паметта.
Мога ли да ги деактивирам?
ddply
е отделен пакет. да!
static_assert
) с проверки по време на изпълнение. Ако искате да премахнете един от тях, е напълно възможно да не искате да деактивирате и останалите.
- person Deduplicator; 30.10.2014
NDEBUG
поради познатост.
- person Rapptz; 30.10.2014
do { } while(0)
няма да работи за static_assert
s в обхвата на пространството от имена или в телата на класа.
- person reima; 30.10.2014
/**/
просто ще доведе до предупреждение, което е грешка с -Werror.
- person Rapptz; 30.10.2014
#define STATIC_ASSERT(...) static_assert(true, "")
?
- person reima; 30.10.2014
Можете или да ги опаковате, всеки за себе си, в свой собствен #ifdef
:
#ifndef NO_STATIC_ASSERT
static_assert(...);
#endif
Или можете да дефинирате свой собствен STATIC_ASSERT
:
#ifndef NO_STATIC_ASSERT
#define STATIC_ASSERT(...) /**/
#else
#define STATIC_ASSERT(...) static_assert(__VA_ARGS__)
#endif
#define static_assert(...)
works too, though it is UB.По този начин можете да премахнете тяхното влияние върху производителността на компилацията (те така или иначе никога не са имали никакво влияние върху производителността по време на изпълнение).
static_assert
е недефинирано поведение
- person Rapptz; 30.10.2014
static_assert
обаждания са отговорни за всички тези разходи? - person Brian Bi   schedule 30.10.2014static_assert
s е като ги премахнете от кода, който ще бъде компилиран, например чрез използване на препроцесора. Те по никакъв начин не допринасят за компилирания код. - person Deduplicator   schedule 30.10.2014