函数地址和函数地址的地址没有区别吗?

xml*_*lmx 5 c c++ pointers function memory-address

void f()
{}

void test()
{
    auto fn_1 = f;
    auto fn_2 = &f;

    assert(fn_1 == fn_2); // OK

    fn_1();      // OK
    fn_2();      // OK
    (*fn_1)();   // OK
    (*fn_2)();   // OK
    (**fn_1)();  // OK
    (**fn_2)();  // OK
    (***fn_1)(); // OK
    (***fn_2)(); // OK
}
Run Code Online (Sandbox Code Playgroud)

这些行为是否由 C++ 标准明确定义?

aar*_*man 1

是的,& 符号是可选的,它们产生相同的结果。

\n\n
\n

函数类型 T 的左值可以转换为指向 T 的指针 \xe2\x80\x9c 类型的纯右值。\xe2\x80\x9d 结果是指向函数的指针。55

\n
\n\n

我只是想说,如果你使用 c++11,你应该使用它,std::function无论如何它更容易理解和使用。

\n