私の質問は、stackoverflow https://stackoverflow.com/a/48082010/5360439 に関するこの回答によって動機付けられています。引用するには
Q:_
std::string_view
_を_const char*
_に変換するにはどうすればよいですか?A:
std::string(string_view_object).c_str()
を実行して、ヌルで終了することが保証された一時的なコピーを取得します(行の最後でクリーンアップします)。
残念ながら、それは新しいstring
を作成します。単にやってもいいのかと思っていますが、
_static_cast<string>(string_view_object).c_str()
_
今、私の質問は:
これは新しい文字列を構築しますか?
Nullで終了するcharシーケンスを返すことが保証されていますか?
デモ用の小さなコードがあります。正常に動作するようです。 (ワンドボックスを参照 results )
_#include <string>
#include <iostream>
#include <string_view>
#include <cstring>
int main()
{
std::string str{"0123456789"};
std::string_view sv(str.c_str(), 5);
std::cout << sv << std::endl;
std::cout << static_cast<std::string>(sv) << std::endl;
std::cout << strlen(static_cast<std::string>(sv).c_str()) << std::endl;
}
_
static_cast<std::string>(sv)
は、std::string::string
に変換可能なすべての型を期待するstd::string_view
コンストラクターを呼び出しています( 詳細 )。したがって、はい、まだ新しいstd::string
オブジェクトを作成しています。これにより、nullで終了する文字シーケンスが保証されます。