我创建了一个课程:
#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
是左值,则_name
的类型将被推断为std::string&
,
如果_name
是r值,则将_name
的类型推断为std::string&&
,
我将Person
初始化为r值的“ Nancy”,因此应该可以正常工作。
我很困惑。