Оптимизация компилятора C ++ - PullRequest
1 голос
/ 21 февраля 2012

Будут ли современные компиляторы C ++ (включая gcc) оптимизировать следующий (подобный макросу) код?

    template<typename F, typename ...A>
    err foo(F fn, A&&... args)
    {
        return fn(std::forward<A>(args)...) ? get_last_error() : err();
    }

Например, может ли он оптимизировать следующий код

    return foo(test, 5, 20, "bar");

до:

    return test(5, 20, "bar") ? get_last_error() : err();

1 Ответ

2 голосов
/ 21 февраля 2012

То, что вы описываете, называется «идеальной пересылкой» (это термин для Google, если вы хотите узнать об этом подробнее), и C ++ 11 поддерживает это благодаря ссылкам на r-значение. Так что ответ - да, он будет полностью оптимизирован.

...