問題タブ [const-string]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - const_stringlibの問題
悪くないように見えるconst_stringlibを試していますが、実行時にアクセス違反(atomic_count、operator ++())でクラッシュします。テストコード:
tがグローバルの場合にのみクラッシュします。宣言をmain()に移動すれば、問題ありません。システム:VS 2010、ブーストv。1.47.0
質問:私は何か間違ったことをしているのですか、それともライブラリ/コンパイラの問題ですか?誰かがC++用の不変文字列のより安定した実装を推奨できますか?
c++ - const_string をマップキーとして; バッファコピーを作成しますか?
const_stringの要点は、文字列が変更されない場合に不要なコピーを作成しないようにすることです。
ただし、const char* ソースの有効期間が const_string よりも長く続くことを保証できない状況があります。たとえば、const_string をマップのキーとして使用している場合、const char* の一部が再利用されると、事前にデバッグするセグメンテーション違反。
const_string を伝える方法はありますか、この const char* のプライベート コピーを保管しておいてください。または std::string?
私が何を求めているのか理解できるように、以前の質問を参照します。
c++ - static const 文字列メンバー変数は、使用前に常に初期化されますか?
C++ で、さまざまなクラス、関数、ファイルで使用できる非ローカル const 文字列を定義したい場合、私が知っているアプローチは次のとおりです。
define ディレクティブを使用します。
/li>const クラスのメンバー変数。
/li>const クラスのメンバー関数。
/li>
私がはっきりしていないのは、2番目のアプローチを使用する場合、変数 ConstStrVal は、実際にコードで使用される前に常に「some_string_value」に初期化されるということです。「静的初期化順序の大失敗」のため、これについて心配しています。この問題が有効である場合、なぜ誰もが 2 番目のアプローチを使用しているのですか?
2 と 3 のどちらが最善のアプローチですか? #define ディレクティブはスコープを尊重しないことを私は知っています。ほとんどの人はそれをお勧めしません。
ありがとう!
c - const 文字列はどこに格納されますか? スタックまたは.data?
以下に示す簡単なc
コードを作成しました。このコード スニペットでは、const 文字列abcd
が格納されている場所を確認します。.data
最初に、読み取り専用のセクションに保存する必要があると思います。しかし、Debian でのテストの後、状況は私が最初に推測したものとは異なります。gcc で生成されたアセンブリ コードを確認すると、 function のスタック フレームに配置されていることがわかりましたp
。しかし、後でOSXで試してみると、文字列が.data
再びセクションに保存されます。今、私はこれに混乱しています。const 文字列を格納するための標準はありますか?
更新: rici の答えは私を目覚めさせます。OSX では、最初のリテラルが格納され.data
、後で関数のスタック フレームに移動されます。したがって、この関数のローカル変数になります。ただし、Debian の gcc は、この状況を処理するため、OSX とは異なります。Debian では、gcc はリテラルを から移動するのではなく、直接スタックに格納しました.data
。不注意で申し訳ありません。
c - C++ コンパイラを使用してコードをコンパイルしているときに、C 文字列リテラルを関数に渡すときに問題が発生しましたか?
「引数の型 " const char *
" は " " と互換性がない」というエラーが表示char *
されます。このコードは教授から提供されたもので、何が問題なのかわかりません。
私は C を書いていますが、C++ コンパイラを使用しています。問題があればデバッグが容易だからです。