为什么转发参考不起作用?
Why forwarding reference does not work?
我对这段代码有疑问:
#include <string>
#include <iostream>
struct A{
template<class UT>
A(UT &&s) : internal(std::forward<std::string>(s)){
}
std::string internal;
};
int main(){
const std::string &s = "hello";
A a1{ s };
std::cout << "s = " << s << std::endl;
}
当前示例无法编译,如果我将 s
更改为非 const,它会移动字符串。
我有类似的代码可以正常工作,但在这种情况下有一些我看不到的错误。
您使用的转发引用不正确。您没有给 std::forward
目标类型。你给它推导的模板:
A(UT &&s) : internal(std::forward<UT>(s)){
我对这段代码有疑问:
#include <string>
#include <iostream>
struct A{
template<class UT>
A(UT &&s) : internal(std::forward<std::string>(s)){
}
std::string internal;
};
int main(){
const std::string &s = "hello";
A a1{ s };
std::cout << "s = " << s << std::endl;
}
当前示例无法编译,如果我将 s
更改为非 const,它会移动字符串。
我有类似的代码可以正常工作,但在这种情况下有一些我看不到的错误。
您使用的转发引用不正确。您没有给 std::forward
目标类型。你给它推导的模板:
A(UT &&s) : internal(std::forward<UT>(s)){