查找值是否是临时值

kir*_*kir 3 c++ templates

我正在尝试创建一个函数来检查参数是否是临时值并返回一个布尔值.

让我们称之为isTemp.例子:

int a;
isTemp(a); // this should be false;

isTemp(43); // should be true;
Run Code Online (Sandbox Code Playgroud)

我已经开始使用模板参数的函数,但是这不起作用,现在我不知道该怎么做:

template <typename T>
bool isTemp(T) { return false; }

template <typename T>
bool isTemp(const T) { return true; }
Run Code Online (Sandbox Code Playgroud)

有什么建议?

mya*_*aut 6

您可以尝试使用通用引用(在C++ 11中引入)

在C++中,临时值通常由rvalues表示(在历史上也是如此,因为rvalues可能出现在赋值表达式的右侧),而其他所有值都被视为lvalues(可以放在赋值运算符的两侧).

通用引用可以表示两者,并且取决于它们将被强制传递给左值引用值引用的,这可以由下式确定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
}
Run Code Online (Sandbox Code Playgroud)