std::size_t n = sizeof( long );
実際、あなたは上記の中で特に悪い習慣と思われるものを尋ねていません。size_tの使用、std名前空間による修飾、...
C ++標準(18.1)にあるように、size_tは標準ヘッダーで定義された型です。C言語からの継承の可能性についての考えや印象を捨てることをお勧めします。C ++は別の異なる言語であり、そのように考える方がよいでしょう。独自の標準ライブラリがあり、C++標準ライブラリのすべての要素は名前空間std内で定義されています。ただし、C++プログラムでC標準ライブラリの要素を使用することは可能です。
汚いハックとして含めることを検討したいと思います。C ++標準では、ヘッダーの内容は同じであるか、C標準ライブラリの対応するヘッダーに基づいていると記載されていますが、多くの場合、変更が適用されています。つまり、CヘッダーをC++ヘッダーに直接コピーして貼り付けることはできません。
size_tは、C++の組み込み型ではありません。これは、sizeof()の実際の戻り型が実装定義されているため、sizeof()演算子の戻り型として使用される積分型の種類を指定するために定義された型であり、C++標準はsize_tを定義することによって統合します。
次のプログラム(インクルードなし)は、すべてのC ++コンパイラでコンパイルされると予想されますか?
size_t foo()
{
return sizeof( long );
}
C ++標準によると(1.4):
ライブラリで定義されている名前には、名前空間スコープ(7.3)があります。AC ++変換ユニット(2.1)は、適切な標準ライブラリヘッダー(16.2)を含めることにより、これらの名前へのアクセスを取得します。
size_tはstd名前空間内で定義された名前であるため、この名前を使用するすべてのプログラムには、対応するヘッダー(この場合)を含める必要があります。
次に、3.7.3の章には次のように書かれています。
ただし、std、std :: bad_alloc、およびstd :: size_tを参照すると、適切なヘッダーを含めて名前が宣言されていない限り、形式が正しくありません。
そのため、size_tを使用しているが、ヘッダーを含まないプログラムは形式が正しくありません。