C ++でのvoid(*)()とvoid(&)()の違い

プロシーク

このサンプルコードでfunc1は、はのタイプでvoid (*)(int, double)ありfunky、はのタイプですvoid(&)(int, double)

#include <iostream>

using namespace std;

void someFunc(int i, double j) {
    cout << i << ":" << j << endl;
} 

int main(int argc, char *argv[]) {

    auto func1 = someFunc; 
    auto& func2 = someFunc;

    cout << typeid(func1).name() << endl;
    cout << typeid(func2).name() << endl;

    func1(10, 20.0);
    func2(10, 30.0);
}

出力は違いを示しています:

PFvidE
FvidE
10:20
10:30

実際には、2つのタイプの違いは何ですか?

asimes

関数にポインタを割り当て、後でそのポインタが指すものを変更できるようにしたい場合は、を使用しますauto fp = funcそうでない場合は、auto& rp = func再割り当てできないため、参照を使用します

#include <iostream>
using namespace std;

int funcA(int i, int j) {
    return i+j;
}

int funcB(int i, int j) {
    return i*j;
}

int main(int argc, char *argv[]) {
    auto fp = funcA;
    auto& rp = funcA;

    cout << fp(1, 2) << endl; // 3 (1 + 2)
    cout << rp(1, 2) << endl; // 3 (1 + 2)

    fp = funcB;
    //rp = funcB; // error: assignment of read-only reference 'rp'

    cout << fp(1, 2) << endl; // 2 (1 * 2)

    return 0;
}

私は誰もがこれを行う理由のより実用的な例を考え出そうとしていました、以下はユーザー入力に基づいて関数を呼び出すためにポインターの配列を使用するいくつかのコードです(の任意の要素はarr実行時にポイントに変更することもできます別の機能へ):

#include <iostream>
using namespace std;

void funcA(int i, int j) {
    std::cout << "0: " << i << ", " << j << endl;
}

void funcB(int i, int j) {
    std::cout << "1: " << i << ", " << j << endl;
}

void funcC(int i, int j) {
    std::cout << "2: " << i << ", " << j << endl;
}

int main(int argc, char *argv[]) {
    if (argc < 2) {
        cout << "Usage: ./a.out <val>" << endl;
        exit(0);
    }

    int index = atoi(argv[1]);
    if (index < 0 || index > 2) {
        cout << "Out of bounds" << endl;
        exit(0);
    }

    void(* arr[])(int, int) = { funcA, funcB, funcC };
    arr[index](1, 2);

    return 0;
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

「C ++ void Pointer」と「C#var」の違い

分類Dev

Objective-C:idとvoidの違い*

分類Dev

C ++:contructor()とconstructor(void)の違い

分類Dev

C ++のvoid関数と非void関数の違い

分類Dev

Cでのvoid関数とfloat関数の違い

分類Dev

Cのvoid関数とstaticvoid関数の違いは何ですか?

分類Dev

C言語:関数のfloatとvoidの違い

分類Dev

C#コンソールアプリケーションのpublic static void Main()とprivate static void Main()の違いは何ですか?

分類Dev

Cの()で(void)とは何ですか

分類Dev

Cのvoid型

分類Dev

C:2つのvoidポインターの違いはどのタイプですか?

分類Dev

Cで `void *`を `int`に変換することについての質問

分類Dev

Cのvoid引数「voidfoo(void)」を使用するのが良いですか、それとも「voidfoo()」を使用しないのが良いですか?

分類Dev

Cのvoid引数「voidfoo(void)」を使用するのが良いですか、それとも「voidfoo()」を使用しないのが良いですか?

分類Dev

(void)objとvoid(obj)の違い

分類Dev

self.completionBlock = ^ {}と(void)(^ completeBlock)(void)= ^ {}の違い

分類Dev

decltype(...、void())とvoid_tの違い

分類Dev

decltype(void())とdecltype(void {})の違い

分類Dev

「void 0」と「undefined」の違い

分類Dev

AutoとVoidの違いは?

分類Dev

AutoとVoidの違いは?

分類Dev

java.lang.Voidとvoidの違いは何ですか?

分類Dev

void関数から別のvoid関数に戻ることはC ++で合法ですか?

分類Dev

クラスの目的= C ++ではvoid?

分類Dev

C ++は、戻り値としての「const void」は、「void」よりもConst-Correctですか?

分類Dev

void *ポインタはCでのジェネリック型付けを目的としていますか?

分類Dev

C ++でのfunc()と(* this).func()の違い

分類Dev

C ++でのfunc()と(* this).func()の違い

分類Dev

Cでのi ++と(i)++の違い

Related 関連記事

  1. 1

    「C ++ void Pointer」と「C#var」の違い

  2. 2

    Objective-C:idとvoidの違い*

  3. 3

    C ++:contructor()とconstructor(void)の違い

  4. 4

    C ++のvoid関数と非void関数の違い

  5. 5

    Cでのvoid関数とfloat関数の違い

  6. 6

    Cのvoid関数とstaticvoid関数の違いは何ですか?

  7. 7

    C言語:関数のfloatとvoidの違い

  8. 8

    C#コンソールアプリケーションのpublic static void Main()とprivate static void Main()の違いは何ですか?

  9. 9

    Cの()で(void)とは何ですか

  10. 10

    Cのvoid型

  11. 11

    C:2つのvoidポインターの違いはどのタイプですか?

  12. 12

    Cで `void *`を `int`に変換することについての質問

  13. 13

    Cのvoid引数「voidfoo(void)」を使用するのが良いですか、それとも「voidfoo()」を使用しないのが良いですか?

  14. 14

    Cのvoid引数「voidfoo(void)」を使用するのが良いですか、それとも「voidfoo()」を使用しないのが良いですか?

  15. 15

    (void)objとvoid(obj)の違い

  16. 16

    self.completionBlock = ^ {}と(void)(^ completeBlock)(void)= ^ {}の違い

  17. 17

    decltype(...、void())とvoid_tの違い

  18. 18

    decltype(void())とdecltype(void {})の違い

  19. 19

    「void 0」と「undefined」の違い

  20. 20

    AutoとVoidの違いは?

  21. 21

    AutoとVoidの違いは?

  22. 22

    java.lang.Voidとvoidの違いは何ですか?

  23. 23

    void関数から別のvoid関数に戻ることはC ++で合法ですか?

  24. 24

    クラスの目的= C ++ではvoid?

  25. 25

    C ++は、戻り値としての「const void」は、「void」よりもConst-Correctですか?

  26. 26

    void *ポインタはCでのジェネリック型付けを目的としていますか?

  27. 27

    C ++でのfunc()と(* this).func()の違い

  28. 28

    C ++でのfunc()と(* this).func()の違い

  29. 29

    Cでのi ++と(i)++の違い

ホットタグ

アーカイブ