Variable number of arguments in C++?

后端 未结 17 1761
-上瘾入骨i
-上瘾入骨i 2020-11-21 23:13

How can I write a function that accepts a variable number of arguments? Is this possible, how?

17条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-11-21 23:21

    You probably shouldn't, and you can probably do what you want to do in a safer and simpler way. Technically to use variable number of arguments in C you include stdarg.h. From that you'll get the va_list type as well as three functions that operate on it called va_start(), va_arg() and va_end().

    #include
    
    int maxof(int n_args, ...)
    {
        va_list ap;
        va_start(ap, n_args);
        int max = va_arg(ap, int);
        for(int i = 2; i <= n_args; i++) {
            int a = va_arg(ap, int);
            if(a > max) max = a;
        }
        va_end(ap);
        return max;
    }
    

    If you ask me, this is a mess. It looks bad, it's unsafe, and it's full of technical details that have nothing to do with what you're conceptually trying to achieve. Instead, consider using overloading or inheritance/polymorphism, builder pattern (as in operator<<() in streams) or default arguments etc. These are all safer: the compiler gets to know more about what you're trying to do so there are more occasions it can stop you before you blow your leg off.

提交回复
热议问题