無料"const char*"静的な初期化時間
-
16-09-2019 - |
質問
初期化の順で無料提供するものである未定義可能です。その一方で、は次のうちどれでしょう?
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であるため)、これらを動的に初期化されています。
str
がstd::string
た場合は、このように、obj
は異なる翻訳単位で定義されている場合は、未定義の動作に実行されますが、それはあなたがそれがトラブルの原因となる記載されている1の場合のみです。
所属していません StackOverflow