Чаму мне не трэба ўключаць загалоўкі STL ў GCC 4.6?

Я выкарыстоўваю GCC 4.6 ў C ++ 0x рэжым. Я заўважыў, што я, здаецца, не атрымаць якія-небудзь памылкі кампілятара, калі я выкарыстоўваю вектараў і іншыя кантэйнеры STL, але не ўключаюць у сябе звязаныя з імі файлы загалоўкаў. Ці быў гэты дызайн? Што пераважная практыка?

Я заўсёды выкарыстоўваю відавочна паказаць патезрасе ... але я заўсёды думаў, што загаловак павінен быць уключаны, нават калі прастора імёнаў паказана.

Гэта здаецца дзіўным па змаўчанні, калі гэта пажадана ўключыць усе загалоўкі, паколькі сумнеўна, што я атрымаю ўсё правільна 100% часу без дапамогі з боку кампілятара.

2
ах, што гэта правільна, але тое, што пераважная практыка трымаць код добра падтрымліваецца? Гэта не заўсёды магчыма, каб пазбегнуць ўключэння загалоўкаў STL ў іншых загалоўках (напрыклад ўбудавальныя функцыі і г.д.)
дададзена аўтар daj, крыніца
Праверце загалоўкі, што праграма ўключае ў сябе загалоўкі STL павінны быць уключаны ў адзін з гэтых загалоўкаў.
дададзена аўтар Alok Save, крыніца
Вы, верагодна, у тым ліку іх ўскосна, праз іншыя загалоўкі.
дададзена аўтар Alexandre C., крыніца

2 адказы

Вы заўсёды павінны ўключаць у сябе ўсе стандартныя загалоўкі, неабходныя код.

На жаль, стандартныя загалоўкі могуць ўключаць іншыя стандартныя загалоўкі, у гэтым выпадку вы можаце апынуцца ў стане выкарыстоўваць нешта не ў тым ліку правільнага загалоўка. Вы не можаце спадзявацца на гэта, і вы можаце выявіць, што вы павінны выправіць ваш ўключае ў сябе, калі вы пераключыцеся на іншую рэалізацыю бібліятэкі.

Там няма простага спосабу гарантаваць, што вы заўсёды атрымаеце ваш ўключаюць у сябе правільна; самы просты варыянт, каб праверыць, што ваш код кампілюецца з усімі рэалізацыямі бібліятэкі вы зацікаўлены ў.

3
дададзена

Опцыя -H дадзена GCC (г.зн. да г ++ у вашым выпадку) зрабіць GCC друку кожны загаловак, гэта ў тым ліку. Гэта можа дапамагчы вам даведацца, як файл быў уключаны (гэта значыць, з якога іншага загалоўка). І я не думаю, што GCC з'яўляецца ў тым ліку чароўна некаторыя STDC загалоўкі ++.

3
дададзена