2017-12-20 9 views
4

const char*を返すと、呼び出し元に出力メモリバッファを提供する必要があり、そのバッファのサイズを変更できないため、通常は関数からstd::stringを返します。C++の文字列リテラルからconst char *を返しますか?

しかし、const char*が文字列リテラルから有効な場合はそれを返しますか? (有効な場合)可能性が速く、私は動的にstd::stringを構築するためのメモリを割り当てる必要はありませんようになり、このようにすること

const char* generate_c_string() { 
    return "ABC"; 
} 

const char* x = "ABC";が有効なため、おそらく有効です。その妥当性を実証するC++標準のリファレンスがありますか?

+0

ポインタを返すときに呼び出し元がバッファを提供する必要がある理由がわかりません。 –

+0

重複としてクローズしているにもかかわらず、両方とも依然として有用であるため、質問と回答を無効にしました。 – Tas

+2

このような短い文字列では、最も一般的なstd :: string実装では動的メモリが割り当てられません。 [std :: stringの文脈で頭字語のSSOの意味](https://stackoverflow.com/questions/10315041/meaning-of-acronym-soso-in-the-context-of-stdstring) –

答えて

6

これが有効であるが、string literalsため、

文字列リテラルはstatic storage durationを持っているので、プログラムの生活のためにメモリ内に存在します。

返されるポインタは、プログラムの有効期間中も有効です。

+2

これは、後でアンロードされる動的ライブラリから 'generate_c_string'のような境界線のシナリオをカバーしていますか? – VTT

+1

@VTT質問に値する –

関連する問題