当我读到这个问题的litb回答时,我了解到通过引用传递数组允许我们获得它的大小.我只是玩了一点代码,并尝试通过引用传递一个"函数",并且令人惊讶地(至少对我来说),这段代码编译:
void execute( void (&func)() ) // func is passed by reference!
{
func();
}
Run Code Online (Sandbox Code Playgroud)
最后一个函数和这个函数之间有什么区别:
void execute( void (*func)() ) // func is passed by pointer!
{
func();
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用VC2008,它在每种情况下产生不同的输出.奇怪的是,在函数指针的情况下,编译器会更好地优化代码:
void print()
{
std::cout << "Hello References!";
}
void execute( void (&func)() ) // optimized
{
func();
}
int main()
{
00291020 call print (291000h)
}
=========================================
// In this case, the compiler removes all function calls in the code!
void print() // optimized!
{
std::cout << …Run Code Online (Sandbox Code Playgroud)