c++ - 如何以编程方式确定表达式在 C++ 中是右值还是左值?

在 C++ 中确定表达式是右值还是左值的最佳方法是什么?可能,这在实践中没有用,但由于我正在学习右值和左值,我认为如果传入的表达式是左值则返回 true 否则返回 false 的函数 is_lvalue 会很好。

例子:

std::string a("Hello");
is_lvalue(std::string()); // false
is_lvalue(a); // true  

最佳答案

stdlib 已经为您完成了大部分工作,您只需要一个函数包装器:

template <typename T>
constexpr bool is_lvalue(T&&) {
  return std::is_lvalue_reference<T>{};
}

如果您传递 std::string 左值,则 T 将推导出为 std::string&const std::string&,对于右值,它将推导出为 std::string

请注意 Yakk's answer将返回一个不同的类型,这样可以提供更大的灵 active ,您应该阅读该答案并可能改用它。

https://stackoverflow.com/questions/36296425/

相关文章:

c++ - 三向比较运算符与减法有何不同?

c++ - std::tuple get() 成员函数

c++ - std::vector 与 std::list 与 std::slist 的相对性能?

c++ - 私有(private)构造函数

c++ - 多行 DEFINE 指令?

c++ - 字符串文字中的符号\0 是什么意思?

c++ - 不允许指向不完整类类型的指针

c++ - 从构造函数的初始化列表中捕获异常

c++ - C++ 中的常量和编译器优化

c++ - 使用 C++ 基类构造函数?