私はすべての文字列を格納する "Common.h"ファイルをプロジェクト全体で再利用しています。コンパイル時にターゲットに含まれていない.hファイルはどうなりますか?
include "Common.h"
、その後、私は私が使用する文字列が必要です:今、私はXcodeで気づい
Common::mystring
を
namespace Common{
static const std::string mystring = "IamAwesum";
}
だから、特定の文字列を必要とするすべてのファイルに私は、ファイルを含めます「.h」ファイルのどれもがターゲットに含まれていないことを示します。しかし、私のプログラムは期待通りにうまくいくようです。誰かが.hファイルに何が起こるか説明できますか?これはどのように作動しますか ?それは "include" "Common.h"ファイルにすべてのデータのコピーがあるからですか?
この場合、静的な文字列がグローバルであることに注意してください。だから彼らはいつでも例外を作り出すことができ、捕まえることはできません。私はあなたの文字列の参照を返す関数を使用することをお勧めします。 'std :: string const&mystring {静的std ::文字列const mystring =" IamAwesum "; return mystring} 'このようにして、オブジェクトは必要なときにのみ構築されます。 – Stargateur
いつでも例外を作成できると言ったときの意味を説明できますか? –
[優れたpdfはこちら](https://www.nsnam.org/docs/linker-problems.doc)グローバルコンストラクタは、メインの前にプログラムの先頭で呼び出され、例外を処理することはできません。ライブラリがロードされたときにグローバルコンストラクタを持つライブラリを実行する場合は、グローバルオブジェクトがビルドされているときに例外を処理できます。そして、ライブラリがロードされたときに例外を処理する方法はありません。そして、この問題は、ユーザーにとって見つけにくいものになります。 – Stargateur