简体   繁体   中英

Does C++ support variable numbers of parameters to functions?

Like printf ?

But I remember that C++ does name mangling with function name and parameter types,

this can deduce that C++ doesn't support variable length parameters...

I just want to make sure, is that the case?

UPDATE

the discussion should exclude those included by extern "C"

Yes. C++ inherits this from C. You can write:

void f(...);

This function can take any number of arguments of any types. But that is not very C++-style. Programmers usually avoid such coding.

However, there is an exception: in template programming, SFINAE makes use of this a lot. For example, see this (taken from here ):

template <typename T>
struct has_typedef_type {
    // Variables "yes" and "no" are guaranteed to have different sizes,
    // specifically sizeof(yes) == 1 and sizeof(no) == 2.
    typedef char yes[1];
    typedef char no[2];

    template <typename C>
    static yes& test(typename C::type*);

    template <typename>
    static no& test(...);

    // If the "sizeof" the result of calling test<T>(0) 
    // would be equal to the sizeof(yes), the first overload worked 
    // and T has a nested type named type.
    static const bool value = sizeof(test<T>(0)) == sizeof(yes);
};

This uses test(...) which is a variadic function.

Yes, C++ supports the ellipsis from C, but I strongly advice against using them, since they are in no way type safe.

If you have access to a good C++11 capable compiler with variadic template support, then you should use that instead. If you don't have that, have a look at how boost::format solves those things.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM