38

C++ 標準ライブラリ ヘッダーは、不特定の方法で相互にインクルードする可能性があるため、通常、プログラマは 1 つのヘッダーが別のヘッダーを含むことに依存するべきではありません。ただし、いくつかのケースでは、ヘッダーに別のヘッダーが含まれていることが保証されているか、そうでなければ別のヘッダーを含める必要がある特定の機能を利用できるようになっています。それらのケースは何ですか?

4

2 に答える 2

38

この回答では、C ヘッダー ( と の両方) が無視<meow.h>され<cmeow>ます。C++ ライブラリ ヘッダーのうち (すべての参照は N4659 に対するものです):

<initializer_list>は以下によって含まれることが保証されています:

<iostream><ios>、、、および(§30.4.1 [iostream.syn]<streambuf> )を含むことが保証されています。<istream><ostream>

<ios><iosfwd>(§30.5.1 [ios.syn] )を含めることが保証されています。

<bitset><string>and <iosfwd>(§23.9.1 [bitset.syn] )を含むことが保証されています。

フリー関数テンプレートstd::beginstd::endC++14バージョンc-r-およびcr-バージョン、および C++17 フリー関数テンプレートおよびstd::sizeは、名目上は にありますが、次のヘッダーのいずれかが含まれている場合にも使用できます: 、、、、、、、、、および( §27.7 [iterator.range]、§27.8 [iterator.container] )。std::emptystd::data<iterator><array><deque><forward_list><list><map><regex><set><string><unordered_map><unordered_set><vector>

<string_view>が含まれている場合、と*begin関数*end、および[utility.swap]std::swapで定義されている 2 つの汎用オーバーロード(と) が使用できることが保証されます。ただし、そうではありません。(§24.4.1 [string.view.synop] )。swap(T&, T&)swap(T (&a)[N], T (&b)[N])size/empty/data

于 2014-10-28T17:43:25.117 に答える