У меня очень простой класс, назовите его Basic, который используется почти во всех других файлах в более крупном проекте. В некоторых случаях требуется отладочный вывод, но в режиме выпуска это не должно быть включено и быть NOOP.Производительность C++, оптимизирующий компилятор, пустая функция .cpp
В настоящее время в заголовке есть определение, которое включает или выключает макрос в зависимости от настройки. Так что это определенно NOOP, когда выключен. Мне интересно, если у меня есть следующий код, если компилятор (MSVS/gcc) может оптимизировать вызов функции, так что он снова является NOOP. (Делая это, коммутатор может быть в .cpp, и переключение будет намного быстрее, время компиляции/соединения).
--Header--
void printDebug(const Basic* p);
class Basic {
Basic() {
simpleSetupCode;
// this should be a NOOP in release,
// but constructor could be inlined
printDebug(this);
}
};
--Source--
// PRINT_DEBUG defined somewhere else or here
#if PRINT_DEBUG
void printDebug(const Basic* p) {
// Lengthy debug print
}
#else
void printDebug(const Basic* p) {}
#endif
Адвокат дьявола: разве это не покрывает большой процент вопросов на этом сайте? Почему люди приходят сюда? Потому что они не знают. И потому, что они либо не знают, как узнать (в этом случае, может быть, они не говорят на сборе), либо они слишком ленивы или поспешили это сделать. Мета-вопрос: мы хотим запретить ленивым/поспешным людям и отвечать только на шланг, который действительно не знает? Некоторые могут быть замешаны в часто задаваемых вопросах (и могут пропустить их); некоторым может понравиться получать пинты снова и снова в основном по одному и тому же вопросу. OP должен был хотя бы обыскать этот сайт (или google), хотя – Mawg
@mawg Он действительно охватывает множество применений этого сайта, и я считаю, что, вероятно, 50% вопросов, заданных здесь, не должны запрашиваться. Этот вопрос, в частности, задается снова и снова, и мой ответ честный - мы не можем сказать, что ваш оптимизатор собирается делать с вашим кодом, только вы можете это сделать. – 2010-05-04 09:00:59
(-1) Итак, ваш ответ не очень «полезен» для пользователя. Вы на самом деле не ответили на их вопросы, независимо от того, был ли это подходящий вопрос или нет. На самом деле, вы не голосовали, чтобы закрыть как дубликат. Если я спрошу «что такое 2 + 2», и вы говорите «выясните это для себя», вы не * помогаете *, и вы не правы *. Это правда, что я должен понять это для себя, но ты не ответил мне. Ваш ответ должен быть комментарием. – DevinB