微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 decltype(param) 说 param 是一个右值引用,但我不能调用一个接受右值引用的函数?

如何解决为什么 decltype(param) 说 param 是一个右值引用,但我不能调用一个接受右值引用的函数?

如何将 Scott Meyers 的“所有参数都是左值”的断言(第 3 页,有效的现代 C++)与 decltype 的参数是右值引用的响应相协调?

例如,在函数 void bar(std::string&& str) 中,str“有一个名字”并且是一个左值(我相信)。我也不能调用一个期望在 bar 内使用 str 作为参数的右值引用的函数,而是一个接受左值引用的函数。然而,我震惊地看到 decltype(str) 告诉我 str一个右值引用。怎么来的?

为了使事情更具体,请考虑以下代码

#include <iostream>
#include <string>
using std::cout;
using std::endl;

void foo(std::string&& str) { std::cout << "terminal function" << std::endl; }
void foo2(std::string& str) { std::cout << "terminal function" << std::endl; }

void bar(std::string&& str) {
    cout << std::is_rvalue_reference<decltype(str)>::value << endl;  // true;
    foo(str);                                                        // error
    foo2(str);                                                       // fine
}

为什么 std::is_rvalue_reference<decltype(str)>::value 为 true,但我无法调用 foo(std::string&&)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。