ホームページ > バックエンド開発 > C++ > テンプレート関数はコンパイル時に C 配列のサイズをどのように決定できますか?

テンプレート関数はコンパイル時に C 配列のサイズをどのように決定できますか?

Barbara Streisand
リリース: 2024-12-24 04:28:13
オリジナル
234 人が閲覧しました

How Can a Template Function Determine the Size of a C   Array at Compile Time?

配列サイズを決定するためのテンプレート関数

以下のテンプレート関数について考えてみましょう:

template<typename T, size_t n>
size_t array_size(const T (&)[n])
{
    return n;
}
ログイン後にコピー

このテンプレートの目的引数として渡された配列のサイズを決定することです。配列を参照によって渡すと、単にポインタを取得するのではなく、そのサイズが保持されます。

説明

これを理解するには、次の点を考慮してください。

  • 参照なしで配列を関数に渡すとポインタが減衰し、配列のサイズが失われます
  • 配列への参照は、配列のサイズと型を維持します。

テンプレート関数では、配列は参照によって渡され、そのサイズが確実にキャプチャされます。テンプレートは、サイズ (n) と要素タイプ (T) を自動的に推定します。これにより、

size_t array_size(const int (&)[3]) {
    return 3;
}
ログイン後にコピー

として利用できるようになります。

size_t size_of_a = array_size(a);
ログイン後にコピー

高度な使用法

があります。コンパイル時のサイズ決定を可能にするこの手法のバリエーション:

template<typename T, size_t n>
char (& array_size(const T (&)[n]) )[n];
ログイン後にコピー

このテンプレートは、サイズ n の char 型の配列への参照。そのため、次のコードはコンパイル時に渡される配列のサイズを示します:

size_t size_of_a = sizeof(array_size(a));
ログイン後にコピー

この構造により、コンパイル時に決定される配列サイズが有効になり、次のようなアクションがサポートされます:

int havingSameSize[sizeof(array_size(a))];
ログイン後にコピー

以上がテンプレート関数はコンパイル時に C 配列のサイズをどのように決定できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート