int a
void fun(int a)
{
a++;
std::cout << "傳入:" << a << std::endl;
}
int main()
{
int a = 10;
std::cout << "初始值:" << a << std::endl;
fun(a);
std::cout << "計(jì)算后:" << a << std::endl;
}
初始值:10
傳入:11
計(jì)算后:10
這樣的函數(shù)調(diào)用時(shí)是不會改變參數(shù)的值的柠衅,在函數(shù)中也就是以一個局部變量的形式存在,當(dāng)函數(shù)結(jié)束時(shí)籍琳,變量a的生命周期也就結(jié)束了菲宴。
int &a
void fun(int &a)
{
a++;
std::cout << "傳入:" << a << std::endl;
}
int main()
{
int a = 10;
std::cout << "初始值:" << a << std::endl;
fun(a);
std::cout << "計(jì)算后:" << a << std::endl;
}
初始值:10
傳入:11
計(jì)算后:11
可以發(fā)現(xiàn)傳入引用時(shí)候,會修改原實(shí)參的值趋急。
const int &a
參數(shù)是較大的數(shù)據(jù)結(jié)構(gòu)類型時(shí)喝峦,而且我們不需要改變原變量中的值。就需要在最前面加一個const修飾符宣谈。這時(shí)候有小伙伴會問愈犹,這樣為啥還不如直接用int a形式。理論上用int a是完全可行的闻丑。但是由于考慮效率問題漩怎,對原變量進(jìn)行一次復(fù)制操作,即使兩個變量名是相同的由于作用域不同嗦嗡,所以其實(shí)是兩個變量勋锤,所以需要一次復(fù)制操作,因此當(dāng)數(shù)據(jù)大小較大時(shí)是非常浪費(fèi)時(shí)間的侥祭。所以直接傳入引用叁执。
void fun(const int &a)
{
//a++; //如果放開茄厘,此行會報(bào)錯。因?yàn)閍不能賦值谈宛,不能被概念
std::cout << "傳入:" << a << std::endl;
}
int main()
{
int a = 10;
std::cout << "初始值:" << a << std::endl;
fun(a);
std::cout << "計(jì)算后:" << a << std::endl;
}
初始值:10
傳入:10
計(jì)算后:10