問題タブ [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.

0 投票する
1 に答える
338 参照

c++ - const_stringlibの問題

悪くないように見えるconst_stringlibを試していますが、実行時にアクセス違反(atomic_count、operator ++())でクラッシュします。テストコード:

tがグローバルの場合にのみクラッシュします。宣言をmain()に移動すれば、問題ありません。システム:VS 2010、ブーストv。1.47.0

質問:私は何か間違ったことをしているのですか、それともライブラリ/コンパイラの問題ですか?誰かがC++用の不変文字列のより安定した実装を推奨できますか?

0 投票する
1 に答える
177 参照

c++ - const_string をマップキーとして; バッファコピーを作成しますか?

const_stringの要点は、文字列が変更されない場合に不要なコピーを作成しないようにすることです。

ただし、const char* ソースの有効期間が const_string よりも長く続くことを保証できない状況があります。たとえば、const_string をマップのキーとして使用している場合、const char* の一部が再利用されると、事前にデバッグするセグメンテーション違反。

const_string を伝える方法はありますか、この const char* のプライベート コピーを保管しておいてください。または std::string?

私が何を求めているのか理解できるように、以前の質問を参照します。

0 投票する
4 に答える
1842 参照

c++ - static const 文字列メンバー変数は、使用前に常に初期化されますか?

C++ で、さまざまなクラス、関数、ファイルで使用できる非ローカル const 文字列を定義したい場合、私が知っているアプローチは次のとおりです。

  1. define ディレクティブを使用します。

    /li>
  2. const クラスのメンバー変数。

    /li>
  3. const クラスのメンバー関数。

    /li>

私がはっきりしていないのは、2番目のアプローチを使用する場合、変数 ConstStrVal は、実際にコードで使用される前に常に「some_string_value」に初期化されるということです。「静的初期化順序の大失敗」のため、これについて心配しています。この問題が有効である場合、なぜ誰もが 2 番目のアプローチを使用しているのですか?

2 と 3 のどちらが最善のアプローチですか? #define ディレクティブはスコープを尊重しないことを私は知っています。ほとんどの人はそれをお勧めしません。

ありがとう!

0 投票する
2 に答える
2373 参照

c - const 文字列はどこに格納されますか? スタックまたは.data?

以下に示す簡単なcコードを作成しました。このコード スニペットでは、const 文字列abcdが格納されている場所を確認します。.data最初に、読み取り専用のセクションに保存する必要があると思います。しかし、Debian でのテストの後、状況は私が最初に推測したものとは異なります。gcc で生成されたアセンブリ コードを確認すると、 function のスタック フレームに配置されていることがわかりましたp。しかし、後でOSXで試してみると、文字列が.data再びセクションに保存されます。今、私はこれに混乱しています。const 文字列を格納するための標準はありますか?


更新: rici の答えは私を目覚めさせます。OSX では、最初のリテラルが格納され.data、後で関数のスタック フレームに移動されます。したがって、この関数のローカル変数になります。ただし、Debian の gcc は、この状況を処理するため、OSX とは異なります。Debian では、gcc はリテラルを から移動するのではなく、直接スタックに格納しました.data。不注意で申し訳ありません。

0 投票する
1 に答える
52 参照

c - C++ コンパイラを使用してコードをコンパイルしているときに、C 文字列リテラルを関数に渡すときに問題が発生しましたか?

「引数の型 " const char *" は " " と互換性がない」というエラーが表示char *されます。このコードは教授から提供されたもので、何が問題なのかわかりません。

私は C を書いていますが、C++ コンパイラを使用しています。問題があればデバッグが容易だからです。