我创建一个类:
#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值,_name
则将类型推断为std::string&&
,
我Person
使用r值的“ Nancy”进行初始化,因此应该可以正常运行。
我感到困惑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句