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
}
这些行为是否由C++标准明确定义?
发布于 2013-09-18 05:46:18
是的,和号是可选的,它们产生相同的结果。
函数类型T的左值可以转换为“指向T的指针”类型的pr值。结果是指向函数的指针。55
我只想说,如果你使用c++11,无论如何你也应该使用std::function
,它更容易理解和使用。
发布于 2013-09-18 05:48:13
这里的问题是,一个函数会衰减成一个函数指针。变量fn_1
和fn_2
的类型都是void (*)()
,即“指向不带参数的函数的指针并返回void
”。在fn_1
的情况下,函数f
衰减为指向函数的指针,而在fn_2
的情况下,您显式地将指向函数的指针分配给fn_2
,并且不会发生衰减。
https://stackoverflow.com/questions/18864655
复制相似问题