我已告知here這兩個簽名之間的差異不是左值/右值相關的。這兩個函數簽名有什麼區別?
#include <iostream>
template <typename RET_TYPE, typename...ARGs>
void takeFunction(RET_TYPE(*&& /*function*/)(ARGs...))
{
std::cout << "RValue function" << std::endl;
}
template <typename RET_TYPE, typename...ARGs>
void takeFunction(RET_TYPE(*& /*function*/)(ARGs...))
{
std::cout << "LValue function" << std::endl;
}
void function()
{
}
int main()
{
void(*f)() = function;
takeFunction(&function);
takeFunction(f);
return 0;
}
但是,如果不是這樣,那麼它在匹配上有什麼區別?
在我看來,第一個是對函數的引用,第二個是對函數指針的引用。 – Galik