【发布时间】:2016-06-27 13:47:23
【问题描述】:
我对这段代码有疑问:
#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 更改为非常量,它会移动字符串。
我有类似的代码可以正常工作,但在这种情况下,我看不到有什么问题。
【问题讨论】:
-
“通用参考”一词不再适用于这个概念,因为它用词不当。甚至该术语的发明者也否认了它,而是更喜欢“转发引用”。
-
使用
std::forward<UT>(s),它仍然不会像现在一样移动字符串,但至少它可以编译并正确处理其他情况 -
@PiotrSkotnicki - 是的。我太傻了:D
-
@PiotrSkotnicki:它不应该移动字符串。您不能从
const&移动。 -
@NicolBolas 再次阅读,我说 “它仍然不会像现在一样移动字符串”
标签: c++11 forwarding-reference