私は、誤って配列内の自己参照によってバグを作成しました。ここではコンセプトが似非常に単純化されたデモプログラムです:C++自己参照配列ですか?
#include <iostream>
using namespace std;
int kTest[] = {
kTest[0]
};
int main() {
cout << kTest[0] << endl;
}
私はコンパイラエラーまたはこのコードでさえも警告もないを受け取ったことに驚きました!私の場合は、予期せぬ出力を生み出しました。ガベージメモリにアクセスしていますか?
私はどのような状況でこれが明確な出力を持っているのか不思議に思っていました。
を編集してください:kTest
がstatic
の場合は違いがありますか? const
はどうですか?どちらも?
hmm。グローバルな 'int'sはゼロで初期化されているので、それが合法であるかどうか疑問に思います。 – NathanOliver
言語標準がこの種の構文を許した状況下で。 –
['int x = x;']とあまり変わりはありません(http://stackoverflow.com/questions/14935722/does-initialization-entail-lvalue-to-rvalue-conversion-is-int-xx-ub) 。 –