我现在对c ++的rvalue概念感到困惑。
我写下面的代码来检查我对rvalue的理解是否正确。但事实证明并非如此。我原以为输出会是"T&&"
,而是打印"T"
。为什么呢?
要打印"T&&"
,哪部分代码需要更改?
谢谢。
template <typename T>
struct printer {
printer(T t)
{
cout << "T" << endl;
}
};
template <typename T>
struct printer<T&&> {
printer(T&& t)
{
cout << "T&&" << endl;
}
};
template <typename T>
struct printer<T&> {
printer(T& t)
{
cout << "T&" << endl;
}
};
int main()
{
printer a(make_unique<int>(5));
return 0;
}
答案 0 :(得分:3)
“T”被打印出来。为什么呢?
自动扣减指南仅考虑主要模板,而不是专业化,因此仅考虑
template <typename T> printer(T) -> printer<T>;
已生成。
要打印“T&amp;&amp;”,哪部分代码需要更改?
您可以添加演绎指南:
template <typename T> printer(T&&) -> printer<T&&>;
注意:扣除指南也适用于printer<T&>
你不会再使用该指南printer<T>
了。