次のコードはなぜ有効ですか?次のコードcompiles (IDEOne)ように、構造体のテストは、テストのベクトルが含まれています:それはあるようC++再帰型定義
#include <iostream>
#include <vector>
using namespace std;
struct test {
vector<test> a;
};
int main() {
// your code goes here
test t;
if (t.a.size() > 0)
return -1;
else if (t.a[0].a[0].a.size() > 0)
return 1;
return 0;
}
がどのようにコンパイラが構造体を扱うんt.a[0].a[0].a.size()
をテストすることは可能でしょうか? .a[0]
の繰り返し回数に制限はありますか?
編集:この質問は、これは未定義の動作であると主張答えを持っていますAre C++ recursive type definitions possible, in particular can I put a vector<T> within the definition of T?
は=>これは>
=を混乱さ、おそらく私の質問は、これはつまるところ、重複
'のstd :: vector'のデフォルトコンストラクタがありませんテンプレート引数が完全修飾名である必要はありません。 – paddy
物事をもっと遠くに押し出すには、 'struct WTF:std :: vector {};'私はPeanoの自然数(https://en.wikipedia.org/wiki/Peano_axioms)を構築するためにそれを使います:D –
YSC
(ヒント: 'operator ++()'は '{push_back(* this); return * this;}')です。 – YSC