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
を変更した場合、それは文字列を移動します。
私は似たようなコードを持っていますが、この場合は見えないものがあります。
「普遍的な参照」という用語は、この概念ではもはや好ましくありません。なぜなら、それはかなりの誤称であるからです。この用語の発明者でさえ、それを否定し、代わりに「転送参照」を好む。 –
'std :: forward(s)'を使用しても、文字列はまだ移動しませんが、少なくともコンパイルして他のケースを正しく処理します。 –
@PiotrSkotnicki - yep。私はとてもばかげています:D – Nick