C ++:テンプレートを介した引数の受け渡しと関数パラメーターを介した受け渡し

好奇心旺盛な学生

テンプレートを介してパラメータを送信する目的はありますか?もしそうなら、これは内部スタックを介してパラメータを送信することとどのように異なりますか?例:

void myMethod(int argument){//Do something with *argument* };

vs

template<int argument>
void myMethod(){//Do something with *argument* };

Thinking in C ++』第1巻、第2版、「テンプレートの詳細」の章では、型以外のテンプレート引数についての単語がほんの少ししかなく、その目的を完全には理解していなかったと感じています。

編集:説明をありがとう。可能であれば、両方が互いに補完し合っているので、両方の回答にマークを付けます。

量子物理学者

違いは、テンプレートの場合、値はコンパイル時に決定および修正されることです。つまり、プログラムをコンパイルするときです。コンパイルが完了した後でそれらを変更することはできず、それらは永久に定数と見なされます。

だから、と:

template<int argument>
void myMethod(){//Do something with *argument* };

を呼び出すmyMethod<5>()と、の値argumentは常に5になり、実行時に関数には実質的に引数がありません。これで、を呼び出すmyMethod<6>()と、コンパイラは同じ関数を別の定数値で再作成します。したがって、実行時に2つの関数があります。

一方、通常の方法では、実行時、つまりプログラムの実行中に変更できます。関数を再度呼び出すと、引数値が異なる同じコードが実行されます。

例:

template <int L>
void DoSomething()
{
    int a[L];  //this works fine here! Becasue L is just a constant that is resolved at compile-time
    for(int i = 0; i < L; i++)
    {
        //do stuff
    }
}


void DoSomething(int L)
{
    int a[L];  //this won't work, because L is a variable that can be set while the program is running
    for(int i = 0; i < L; i++)
    {
        //do stuff
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++ 11:関数テンプレート:参照によるパラメーターの受け渡し

分類Dev

JNIを介したCとJava間のポインターの受け渡し

分類Dev

Cの関数へのパラメーターとしての構造体メンバーの受け渡し

分類Dev

渡された関数が関数もパラメーターとして受け取る場合、関数をパラメーターとしてCの関数に渡すにはどうすればよいですか?

分類Dev

テンプレート引数、C ++を介してデータを渡す

分類Dev

C++ 可変個引数テンプレートが iostream 値をパラメータとして受け入れないのはなぜですか?

分類Dev

Cでの関数配列のパラメータ受け渡し/戻り、

分類Dev

C-参照と値による関数への構造パラメーターの受け渡し

分類Dev

関数テンプレートをC ++のパラメーターとして渡す

分類Dev

C ++で参照を受け入れる関数へのポインターの受け渡し

分類Dev

C ++ 11のテンプレートパラメータを使用した再帰的可変個引数void関数

分類Dev

C ++のテンプレート関数への参照による配列の受け渡し

分類Dev

テンプレート引数として関数を使用したC ++関数呼び出しラッパー

分類Dev

ブロックをパラメーターとして受け取るObjective-C関数に迅速なクロージャを渡します

分類Dev

C#では、割り当てとパラメーターの受け渡しを1つのステートメントで実行できますか?

分類Dev

派生クラスのメンバー関数ポインターをパラメーターとして渡すときに、C ++の誤ったテンプレートの特殊化が選択されました

分類Dev

C関数パラメーターまたはC ++テンプレート引数としてキーワードを使用します

分類Dev

C#のタスク:パラメーターとしての二重型関数の受け渡しエラー

分類Dev

Cの可変個引数関数でパラメーターとして渡されたvoidポインターをどのように操作しますか

分類Dev

C ++ / decltype(lambda)を使用した可変個引数テンプレートとパラメーターパック

分類Dev

C#でのTypeパラメーターの作成と受け渡し

分類Dev

テンプレートを使用してc ++で関数にany-typeパラメーターを渡す

分類Dev

db.transaction関数を介したパラメーターの受け渡し

分類Dev

内部テンプレートクラスをC ++のテンプレート引数として渡します

分類Dev

C++: 参照をパラメーターとして渡しますが、その関数は参照をパラメーターとして受け入れません

分類Dev

cのstrcpy関数へのポインターの受け渡し

分類Dev

Cプログラミング文字関数の受け渡し

分類Dev

関数パラメーターの引数をC ++テンプレートクラスに解凍します

分類Dev

クラスコンストラクターのC ++パラメーターの受け渡し(参照)

Related 関連記事

  1. 1

    C ++ 11:関数テンプレート:参照によるパラメーターの受け渡し

  2. 2

    JNIを介したCとJava間のポインターの受け渡し

  3. 3

    Cの関数へのパラメーターとしての構造体メンバーの受け渡し

  4. 4

    渡された関数が関数もパラメーターとして受け取る場合、関数をパラメーターとしてCの関数に渡すにはどうすればよいですか?

  5. 5

    テンプレート引数、C ++を介してデータを渡す

  6. 6

    C++ 可変個引数テンプレートが iostream 値をパラメータとして受け入れないのはなぜですか?

  7. 7

    Cでの関数配列のパラメータ受け渡し/戻り、

  8. 8

    C-参照と値による関数への構造パラメーターの受け渡し

  9. 9

    関数テンプレートをC ++のパラメーターとして渡す

  10. 10

    C ++で参照を受け入れる関数へのポインターの受け渡し

  11. 11

    C ++ 11のテンプレートパラメータを使用した再帰的可変個引数void関数

  12. 12

    C ++のテンプレート関数への参照による配列の受け渡し

  13. 13

    テンプレート引数として関数を使用したC ++関数呼び出しラッパー

  14. 14

    ブロックをパラメーターとして受け取るObjective-C関数に迅速なクロージャを渡します

  15. 15

    C#では、割り当てとパラメーターの受け渡しを1つのステートメントで実行できますか?

  16. 16

    派生クラスのメンバー関数ポインターをパラメーターとして渡すときに、C ++の誤ったテンプレートの特殊化が選択されました

  17. 17

    C関数パラメーターまたはC ++テンプレート引数としてキーワードを使用します

  18. 18

    C#のタスク:パラメーターとしての二重型関数の受け渡しエラー

  19. 19

    Cの可変個引数関数でパラメーターとして渡されたvoidポインターをどのように操作しますか

  20. 20

    C ++ / decltype(lambda)を使用した可変個引数テンプレートとパラメーターパック

  21. 21

    C#でのTypeパラメーターの作成と受け渡し

  22. 22

    テンプレートを使用してc ++で関数にany-typeパラメーターを渡す

  23. 23

    db.transaction関数を介したパラメーターの受け渡し

  24. 24

    内部テンプレートクラスをC ++のテンプレート引数として渡します

  25. 25

    C++: 参照をパラメーターとして渡しますが、その関数は参照をパラメーターとして受け入れません

  26. 26

    cのstrcpy関数へのポインターの受け渡し

  27. 27

    Cプログラミング文字関数の受け渡し

  28. 28

    関数パラメーターの引数をC ++テンプレートクラスに解凍します

  29. 29

    クラスコンストラクターのC ++パラメーターの受け渡し(参照)

ホットタグ

アーカイブ