When should I use [[maybe_unused]]?

后端 未结 2 1767
情话喂你
情话喂你 2020-12-15 03:31

What is good about using [[maybe_unused]]? Consider

int winmain(int instance, int /*prevInstance*/, const char */*cmdline*/, int show);

int win         


        
相关标签:
2条回答
  • 2020-12-15 04:14

    Baum mit Augen's answer is the definitive and undisputed explanation. I just want to present another example, which doesn't require macros. Specifically, C++17 introduced the constexpr if construct. So you may see template code like this (bar the stupid functionality):

    #include <type_traits>
    
    template<typename T>
    auto add_or_double(T t1, T t2) noexcept {
        if constexpr (std::is_same_v<T, int>)
            return t1 + t2;
        else
            return t1 * 2.0;
    }
    
    int main(){
        add_or_double(1, 2);
        add_or_double(1.0, 2.0);
    }
    

    As of writing this, GCC 8.0.1 warns me about t2 being unused when the else branch is the instantiated one. The attribute is indispensable in a case like this too.

    0 讨论(0)
  • 2020-12-15 04:20

    If the parameter is definitely unused, [[maybe_unused]] is not particularly useful, unnamed parameters and comments work just fine for that.

    [[maybe_unused]] is mostly useful for things that are potentially unused, like in

    void fun(int i, int j) {
        assert(i < j);
        // j not used here anymore
    }
    

    This can't be handled with unnamed parameters, but if NDEBUG is defined, will produce a warning because j is unused.

    Similar situations can occur when a parameter is only used for (potentially disabled) logging.

    0 讨论(0)
提交回复
热议问题