我创建一个类:
#include <iostream>
#include <string>
class Person {
public:
template<typename T>
Person(T&& _name) :
m_name(std::forward<T>(_name)) {
}
private:
std::string m_name;
};
并调用它:
int main(int argc, char const *argv[]) {
Person p("Nancy");
return 0;
}
但是编译器会抛出错误并显示很多消息:
t.cc:8:5: error: no matching constructor for initialization of 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >')
m_name(std::forward<T>(_name)) {
^ ~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
_name
的类型是通用引用,我将_name
完美地转发到m_name
。我所知,
如果
_name
是l值,则_name
的类型将推断为std::string&
,如果
_name
是r-value,则_name
的类型将推断为std::string&&
,我用r值的“Nancy”初始化
Person
,所以应该可以正常工作。我感到困惑。
最佳答案
std::forward
header 中定义了utility
函数,因此您缺少include语句:
#include <utility>
检查reference。
关于c++ - 错误:在初始化列表中使用std::forward,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58319167/