【问题标题】:How to interpret "void(*)()"?如何解释“void(*)()”?
【发布时间】:2020-02-07 13:18:46
【问题描述】:

当我阅读shared_ptr时,我发现了一段代码:

void(*)()

如何解读?

【问题讨论】:

    标签: c++ c++11 syntax semantics


    【解决方案1】:

    开闭括号(*) 之间的星号表示函数指针的声明。 this 的左右分别代表它所指向的函数的返回类型和函数参数。

    所以基本上在你的情况下:

    void printHello()
    {
        std::cout<<"Hello";
    }
    
    void(*fPtr)() = printHello;
    

    在 C++ 中,您可以使用更好的 OOP 方式来做同样的事情:

    std::function<void()> fPtr = printHello;
    fPtr();
    

    您必须包含 functional 标头

    【讨论】:

      【解决方案2】:

      它是一个函数类型的指针,它可以用于所有没有参数并返回void的函数。

      例如:

      void function_1() {}
      void function_2() {}
      
      void(*func_1_ptr)() = function_1; // or = &function_1;
      void(*func_2_ptr)() = function_2; // or = &function_2;
      

      现在func_1_ptr 持有指向函数function_1 的指针,func_2_ptr 持有指向function_2 的指针。

      您可以通过using 声明使类型更直观。

      using FunPtrType = void(*)();
      

      现在你可以写了

      FunPtrType  func_1_ptr = function_1; // or = &function_1;
      //Type      identifier   function
      FunPtrType  func_2_ptr = function_2; // or = &function_2;
      

      【讨论】:

      • 只是为了完整:您像普通函数一样使用它们,所以func_1_ptr(); 调用function_1()
      【解决方案3】:

      这是指向函数的指针类型,它不带参数并返回void

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-07
        • 1970-01-01
        • 1970-01-01
        • 2017-03-09
        • 1970-01-01
        相关资源
        最近更新 更多