Объркване относно променливите шаблони в стандарта c++11

Каква е разликата между двете функции?

template <class ...Types> void f(Types... args...){}
template <class ...Types> void g(Types... args){}

person ZhangXiongpang    schedule 24.02.2013    source източник
comment
Свързани: stackoverflow.com/questions/5625600/   -  person jogojapan    schedule 24.02.2013


Отговори (1)


f е точно същото като

template <class ...Types> void f(Types... args, ...){}
//                                            ^^^^^

Т.е., това е просто обикновен стар списък с променливи параметри от C. Поради исторически причини той може да се използва без обичайното ,, което е необходимо за разделяне на параметри. Разликата с g е точно този параметър.

Имайте предвид, че никакви аргументи никога няма да бъдат подавани към списъка с променливи параметри в стил C, тъй като променливите параметри в стил C++ ще „погълнат“ всички аргументи.

person Xeo    schedule 24.02.2013