我试图创建一个函数来检查参数是否是临时值并返回一个布尔值。
让我们称之为isTemp。例子:
int a;
isTemp(a); // this should be false;
isTemp(43); // should be true;
我已经使用模板参数启动了该功能,但是这不起作用,现在我不知道该怎么做:
template <typename T>
bool isTemp(T) { return false; }
template <typename T>
bool isTemp(const T) { return true; }
有什么建议吗?
答案 0 :(得分:6)
您可以尝试使用通用引用(在C ++ 11中引入)
在C ++中,临时值通常由 rvalues 表示(历史上所谓,因为rvalues可能出现在赋值表达式的右侧),而其他所有值都被视为左值(可以放在赋值运算符的两边)。
通用引用可以表示两者,并且取决于它们将强制传递给左值引用或右值引用的值,这可以由std::is_rvalue_reference
确定。
以下是一个示例代码:
#include <type_traits>
#include <iostream>
template <typename T>
bool isTemp(T&& t) {
return std::is_rvalue_reference<T&&>::value;
}
int f() { return 0; }
int main() {
int a;
std::cout << isTemp(a) << std::endl; // prints 0
std::cout << isTemp(f()) << std::endl; // prints 1
std::cout << isTemp(43) << std::endl; // prints 1
}