C++ 函数参数 值传递与引用传递
生活随笔
收集整理的這篇文章主要介紹了
C++ 函数参数 值传递与引用传递
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以前我們在C語言中函數參數傳遞過程中,如果我們想要讓當A函數作用域中的變量經過B函數處理之后的數值仍然在A函數中生效,這個時候函數參數的傳遞時需要引用方式去傳遞,方式如下:
#include <stdio.h>
//函數參數為指針,通過修改指針里面的內容達到對main中b變量的修改
void func(int *a)
{printf("value is %d \n",*a);*a = 20;
}
int main()
{int b=10;//參數傳遞的時候傳入b變量的地址即可func(&b);printf("from main and b is %d\n",b);return 0;
}
編譯運行,結果如下
value is 10
from main and b is 20
C++通同樣需要如此,只是語法有部分差異,同時當類的實例作為函數時又會有額外的拷貝構造過程消耗內存,此時需要進行引用傳遞來減少拷貝構造,通過std::ref進行引用傳遞。如果進行值傳遞,之間將定義類類型的變量傳入即可。
如下代碼:
#include <iostream>
#include <thread>
class Factor{
public:void operator()(std::string &a){std::cout << " value is " << a << std::endl;a = " i am changed";}
};int main()
{std::string a = "I am a value ";//C++中兼容C的語法,同時有自己封裝的模板庫。std::ref用于函數參數傳入類類型的引用std::thread t1(Factor(),std::ref(a));t1.join();std::cout << " from main value is " << a << std::endl; return 0;
}
編譯g++ -std=c++11 ref.cc -o ref -lpthread
結果如下
value is I am a value
from main value is i am changed
總結
以上是生活随笔為你收集整理的C++ 函数参数 值传递与引用传递的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ceph-dencoder工具使用详解
- 下一篇: cf手游QCW05变形金刚大黄蜂获取途径