0

我对这段代码有疑问:

#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为非常量,它会移动字符串。

我有类似的代码可以正常工作,但在这种情况下,我看不到有什么问题。

4

1 回答 1

0

您错误地使用了转发参考。你没有给出std::forward目的地类型。你给它推导出的模板:

A(UT &&s) : internal(std::forward<UT>(s)){
于 2016-06-27T13:53:45.440 回答