void(int)和void(*)(int)之间的区别

德里克

我知道void (*)(int)是函数指针,但是什么void(int)呢?

用于std::function模板。

说我有一个功能void fun(int){}decltype(&fun)void(*)(int)decltype(fun)void(int)

克瑞克SB

如果T是类型,则T*表示类型为“指向-的指针T”。

类型void(int)是一个函数类型,它是一个带一个int返回的函数的类型void例如,它是fiff声明为的类型void f(int);

如果T = void(int),则T*拼写了void(*)(int),则后者是函数指针的类型您还可以形成对函数的引用,即T& = void(&)(int)有时这会更有用(例如,您可以使用函数左值的地址)。


撇开注释:函数左值很容易衰减到其函数指针。您可以通过函数左值或函数指针来调用函数。当用作间接运算符(*的操作数时,函数值会衰减,因此可以一次又一次取消引用指针:

printf("Hello world\n");        // OK
(*printf)("Hello world\n");     // also OK
(****printf)("Hello world\n");  // four-star programmer

只有当函数用作地址运算符的操作数或绑定到引用时,函数才不会衰减的某些情况是:

void f(int);          // our example function

void(*p1)(int) = &f;  // no decay of "f" here
void(*p2)(int) = f;   // "f" decays
void(&r1)(int) = f;   // no decay of "f" here

void g(void(&callback)(int), int n) {
  callback(n);
}
g(f, 10);             // no decay of "f" here

template <typename F, typename ...Args>
decltype(auto) h(F&& callback, Args&&... args) {
    return std::forward<F>(callback)(std::forward<Args>(args)...);
}
h(f, 10);             // no decay of "f" here

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

“ void main”和“ int main”之间的区别

来自分类Dev

decltype(void())和decltype(void {})之间的区别

来自分类Dev

C ++中void(*)()和void(&)()之间的区别

来自分类Dev

(void)obj和void(obj)之间的区别

来自分类Dev

void insertElementAt(Object obj, int index) 和 void set(int index,object o) 的区别

来自分类Dev

Int ...和Int []之间的区别

来自分类Dev

int * a和int * a = new int之间的区别

来自分类Dev

void proc和带丢弃的void proc之间的区别

来自分类Dev

self.completionBlock = ^ {}和(void)(^ completionBlock)(void)= ^ {}之间的区别

来自分类Dev

decltype(...,void())和void_t之间的区别

来自分类Dev

C ++中void和非void函数之间的区别

来自分类Dev

typeof undefined和void之间的JavaScript区别?

来自分类Dev

(void *)指针和&pointer之间的区别?

来自分类Dev

方法的return nil和void之间的区别

来自分类Dev

int * a和char * a之间的区别?

来自分类Dev

char []和int []之间的区别

来自分类Dev

const int和int文字之间的区别

来自分类Dev

int和new int()之间的区别

来自分类Dev

快速关闭中返回Void和()之间的区别

来自分类Dev

SwingUtilities.invokeLater和SwingWorker <Void,Object>之间的区别?

来自分类Dev

C ++:contructor()和构造函数(void)之间的区别

来自分类Dev

C语言中void和float函数之间的区别

来自分类Dev

C和C ++中的void指针之间的区别

来自分类Dev

C ++:contructor()和构造函数(void)之间的区别

来自分类Dev

C语言:函数中的float和void之间的区别

来自分类Dev

int(* function)(int,int)和int * function(int,int)之间的区别

来自分类Dev

void()和void {}有什么区别?

来自分类Dev

void *和*(void **)有什么区别?

来自分类Dev

Seq [Int]和List [Int]之间的区别和转换

Related 相关文章

  1. 1

    “ void main”和“ int main”之间的区别

  2. 2

    decltype(void())和decltype(void {})之间的区别

  3. 3

    C ++中void(*)()和void(&)()之间的区别

  4. 4

    (void)obj和void(obj)之间的区别

  5. 5

    void insertElementAt(Object obj, int index) 和 void set(int index,object o) 的区别

  6. 6

    Int ...和Int []之间的区别

  7. 7

    int * a和int * a = new int之间的区别

  8. 8

    void proc和带丢弃的void proc之间的区别

  9. 9

    self.completionBlock = ^ {}和(void)(^ completionBlock)(void)= ^ {}之间的区别

  10. 10

    decltype(...,void())和void_t之间的区别

  11. 11

    C ++中void和非void函数之间的区别

  12. 12

    typeof undefined和void之间的JavaScript区别?

  13. 13

    (void *)指针和&pointer之间的区别?

  14. 14

    方法的return nil和void之间的区别

  15. 15

    int * a和char * a之间的区别?

  16. 16

    char []和int []之间的区别

  17. 17

    const int和int文字之间的区别

  18. 18

    int和new int()之间的区别

  19. 19

    快速关闭中返回Void和()之间的区别

  20. 20

    SwingUtilities.invokeLater和SwingWorker <Void,Object>之间的区别?

  21. 21

    C ++:contructor()和构造函数(void)之间的区别

  22. 22

    C语言中void和float函数之间的区别

  23. 23

    C和C ++中的void指针之间的区别

  24. 24

    C ++:contructor()和构造函数(void)之间的区别

  25. 25

    C语言:函数中的float和void之间的区别

  26. 26

    int(* function)(int,int)和int * function(int,int)之间的区别

  27. 27

    void()和void {}有什么区别?

  28. 28

    void *和*(void **)有什么区别?

  29. 29

    Seq [Int]和List [Int]之间的区别和转换

热门标签

归档