2016-06-27 8 views
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; 
} 

この現在の例ではなくコンパイルを行い、私は非constのようにsを変更した場合、それは文字列を移動します。

私は似たようなコードを持っていますが、この場合は見えないものがあります。

+0

「普遍的な参照」という用語は、この概念ではもはや好ましくありません。なぜなら、それはかなりの誤称であるからです。この用語の発明者でさえ、それを否定し、代わりに「転送参照」を好む。 –

+1

'std :: forward (s)'を使用しても、文字列はまだ移動しませんが、少なくともコンパイルして他のケースを正しく処理します。 –

+0

@PiotrSkotnicki - yep。私はとてもばかげています:D – Nick

答えて

0

転送参照を間違って使用しています。宛先タイプはstd::forwardではありません。

A(UT &&s) : internal(std::forward<UT>(s)){ 
関連する問題