質問

初期化の順で無料提供するものである未定義可能です。その一方で、は次のうちどれでしょう?

namespace foo {
    char const* str = "hey";
    struct A {
        A() { cout << str; }
    } obj;
}

はこのまだ未定義の動作は、ある特別引当金ポインタで初期化され文字列リテラル?

それとは別に:どの場合はstrのタイプ"const char[]"?とあった場合は、std::string?

役に立ちましたか?

解決 2

のトの再計算順序を定義してinitialisedの順に表示され、作成ユニット参照3.6.2のC++ます。の種類は、ともすれinitialisedしても、何の効果もありません。

他のヒント

これらは異なる翻訳単位に配置されることになる場合でも、初期化順序がまだ定義されています。

strは、定数式(address constant expression)とstrポッド型を有するで初期化されるので、

これはあります。あなたは、配列を持っていたかどうかはまだ当てはまるでしょう。あなたがstd::stringを持っていた場合しかし、それはもはや真実ではないでしょう。 (std::stringが非PODであるため)、これらを動的に初期化されています。

あなたのstrstd::stringた場合は、

このように、objは異なる翻訳単位で定義されている場合は、未定義の動作に実行されますが、それはあなたがそれがトラブルの原因となる記載されている1の場合のみです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top