![](/img/trans.png)
[英]Is there any benefit in using std::forward instead of std::move to initialize an object?
[英]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 值,所以它應該可以正常工作,因為我知道。
我感到困惑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.