フォワーディング参照パラメータ転送参照のparamを持つ関数テンプレート対略称関数テンプレートに
template<typename T>
void Universal_func(T && a)
{
}
と簡略関数テンプレートと 関数テンプレートの違いは何ですか?
void auto_fun(auto && a)
{
}
私はauto_fun
でUniversal_func
を置き換えることはできますか? auto_fun
またはそれらが等しいのUniversal_func
ですか?
私は、以下のプログラムをテストしました。両方が同じであるようです。
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いいえ、そうではありません。 Lambdaは 'auto'パラメータIIRCを持つことができますが、明確に機能していません。 – hvd