簡體   English   中英

錯誤:在初始化列表中使用 std::forward

[英]Error: Using std::forward in initialize-lists

我創建了一個 class:

#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&&

我用“Nancy”初始化Person ,它是 r 值,所以它應該可以正常工作,因為我知道。

我感到困惑。

std::forward function 在utility header 中定義,因此您缺少包含語句:

#include <utility>

檢查參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM