変数をコンパイラで構築された文字列として区別するにはどうすればよいですか?
たとえば、右辺値"Hello, World"
の型はconst char*
. const char*
それ自体は、ポインターを変更できないという意味ではありません。ポインターを変更するchar* const
ことはできませんが、それはコンパイラーによって構築されるものではありません。
これは、 を保持するコンテナconst char*
の場合、C++ の移動セマンティクス以外の方法でデータをコピーする必要があるということですか? コンパイラで構築された文字列を移動し、他のすべての文字列をそのままにしておく方法はありますか?
たとえば、GCC 4.5.2 では、 ではint
なく型を返すメソッドは、 を返すint&
ものとして扱われint&&
ます。実際の標準がこのようになっているかどうかはわかりませんが、GCC が当分の間そうしていることです。
編集:明確にするために、ポインタが指す実際のメモリをコピーする必要があることを意味します。これは、新しいメモリを割り当てる必要があり、ポインターからのデータを新しい場所にコピーする必要があることを意味します。