【发布时间】:2021-04-07 09:58:25
【问题描述】:
在查看std::forward 的参考页面时,我发现了一些奇怪的东西。该示例将左值作为右值引用传递......但传递给全局函数......并且它编译并运行。我尝试了与成员函数相同的操作,但无法编译。是什么赋予了?如果不使用std::move 或std::forward<T>,我希望这两个调用都会失败。
#include <iostream>
template <typename T>
void globalDoSomething(T &&data) {
std::cout << "We're doing it!!" << std::endl;
}
template <typename T>
class A {
public:
void doSomething(T &&data);
};
template <typename T>
void A<T>::doSomething(T &&data)
{
std::cerr << "Ah, man. I won't compile." << std::endl;
}
template class A<int>;
int main()
{
int b = 0;
globalDoSomething(b);
A<int> a;
a.doSomething(b);
return 0;
}
【问题讨论】:
标签: c++ templates move-semantics rvalue-reference member-functions