错误:在初始化列表中使用std :: forward

花wei

我创建一个类:

#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”进行初始化,因此应该可以正常运行。

我感到困惑。

胡桃夹子

std::forward函数是在utility标头中定义的,因此您缺少包含语句:

#include <utility>

检查参考

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章