Каковы различия между шаблонов функций с эталонных параметрами экспедиторскойСокращенного шаблон функции по сравнению с шаблоном функции с эталонными экспедиторскими парами
template<typename T>
void Universal_func(T && a)
{
}
и сокращенных функциями шаблонов?
void auto_fun(auto && a)
{
}
Могу ли я заменить Universal_func
с auto_fun
? Is Universal_func
a из auto_fun
или они равны?
Я протестировал программу ниже. Кажется, что оба они одинаковы.
template<typename T>
void Universal_func(T && a)
{
}
void auto_fun(auto && a)
{
}
int main()
{
int i;
const int const_i = 0;
const int const_ref =const_i;
//forwarding reference template function example
Universal_func(1); //call void Universal_func<int>(int&&)
Universal_func(i);//call void Universal_func<int&>(int&):
Universal_func(const_i); //call void Universal_func<int const&>(int const&)
Universal_func(const_ref);//call void Universal_func<int const&>(int const&)
//auto calls
auto_fun(1); //call void auto_fun<int>(int&&)
auto_fun(i);//call void auto_fun<int&>(int&):
auto_fun(const_i); //call void auto_fun<int const&>(int const&)
auto_fun(const_ref);//call void auto_fun<int const&>(int const&)
return 0;
}
Universal_func
и auto_fun
вывели и расширили аналогичные функции.
void Universal_func<int>(int&&):
pushq %rbp
movq %rsp, %rbp
movq %rdi, -8(%rbp)
nop
popq %rbp
ret
void Universal_func<int&>(int&):
pushq %rbp
movq %rsp, %rbp
movq %rdi, -8(%rbp)
nop
popq %rbp
ret
void Universal_func<int const&>(int const&):
pushq %rbp
movq %rsp, %rbp
movq %rdi, -8(%rbp)
nop
popq %rbp
ret
void auto_fun<int>(int&&):
pushq %rbp
movq %rsp, %rbp
movq %rdi, -8(%rbp)
nop
popq %rbp
ret
void auto_fun<int&>(int&):
pushq %rbp
movq %rsp, %rbp
movq %rdi, -8(%rbp)
nop
popq %rbp
ret
void auto_fun<int const&>(int const&):
pushq %rbp
movq %rsp, %rbp
movq %rdi, -8(%rbp)
nop
popq %rbp
ret
Есть ли разница? Что говорит стандарт?
функция с параметром auto не является стандартным C++. – 101010
@ 101010 Это C++ 14. – Zereges
@ Zereges Нет, это не так. Lambdas может иметь параметры 'auto' IIRC, но функции определенно еще не установлены. – hvd