次のコードを考えてみてください:タイプはr値参照に推論されません。なぜそうではありませんか?
class CMyClass {};
template<class T>
void func(T&& param) {
if (std::is_same<CMyClass, std::decay<T>::type>::value)
std::cout << "param is a CMyClass\n";
if (std::is_same<T, CMyClass&>::value)
std::cout << "param is a CMyClass reference\n";
else if (std::is_same<T, CMyClass&&>::value)
std::cout << "param is a CMyClass r-value reference\n";
else if (std::is_same<T, const CMyClass&>::value)
std::cout << "param is a const CMyClass reference\n";
else if (std::is_same<T, const CMyClass&&>::value)
std::cout << "param is a const CMyClass r-value reference\n";
else if (std::is_same<T, const CMyClass>::value)
std::cout << "param is a constant CMyClass\n";
else if (std::is_same<T, CMyClass>::value)
std::cout << "param is a CMyClass\n";
else
std::cout << "param is not a CMyClass\n";
}
CMyClass mc3;
func(std::move(mc3));
この小さなプログラムからの出力はなぜMC3のタイプはr値の参照してくださいする
param is a CMyClass
param is a CMyClass
推測されていませんか?
related/dupe:http://stackoverflow.com/questions/16373881/why-forwarding-reference-does-not-deduce-to-rvalue-reference-in-case-of-value – NathanOliver
_「なぜmc3のタイプはr値参照になると推測されていませんか? "_それは1つではないからですか? –
あなたのコードは、 'T'の型が何であるかをチェックしますが、' param'の型についての情報を表示します。 'param'の型は' T && 'ではなく' T'ではないので、あなたのプログラムは存在します。さて、 'T && 'を' CMyClass &&'とするために 'T'を代用するためにはどのような型が必要ですか?それで 'T 'とは何ですか? –