欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C/C++ - Auto & Reference

最编程 2024-01-25 17:18:21
...
  • 引用参数使用 & 符号进行声明,表示该参数是一个引用。

    void Fun(int& ref/*引用参数*/)
    {
    
    	return;
    }
    
  • 引用参数在函数内部直接操作原始变量,而不会创建副本。

    #include <iostream>
    
    //创建副本 -> 将参数的值PUSH进STACK
    void Fun2(int a)
    {
    
    }
    
    //地址传递 -> 指针
    void Fun3(int* p)
    {
    
    }
    
    //地址传递 -> 引用
    void Fun4(int& ref)
    {
    
    }
    
    int main()
    {
    	int Num = 0;
    	Fun2(Num);	//int a = Num;
    	Fun3(&Num);	//int* p = &Num;
    	Fun4(Num);  //int& ref = Num;
    
    	return 0;
    }
    
    //Fun2
    mov         eax,dword ptr [Num] 
    push        eax							//创建副本                 
    call        Fun2 (04113B1h)  
    add         esp,4  
    
    //Fun3
    lea         eax,[Num]  
    push        eax  						//地址传递
    call        Fun3 (04113A7h)  
    add         esp,4  
    
    //Fun4
    lea         eax,[Num]  
    push        eax 						//地址传递 
    call        Fun4 (04113B6h)  
    add         esp,4  
    
    
    
    
  • 引用参数可以在函数内部修改原始变量的值。

    #include <iostream>
    
    //地址传递 -> 引用
    void Fun4(int& ref)
    {
    	//[ref] -> main->Num.Addr
    	ref = 2;
    }
    
    int main()
    {
    	int Num = 0;
    	Fun4(Num);  //int& ref = Num;
    
    	return 0;
    }
    
  • 通过引用传递参数可以实现函数的返回多个值的效果。

    #include <iostream>
    
    bool cc_OpenFile(const char* szFileName, int& nFileSize)
    {
    	//TODO
    	bool bret = true;
    	if (bret)
    	{
    		nFileSize = 123;
    	}
    
    	return bret;
    }
    
    int main()
    {
    	int FileSize = 0;
    	bool bret = cc_OpenFile("D:\\1.txt", FileSize);
    
    	return 0;
    }