c++函数调用

 

 

void f(const string &s)

{

         return ;

}

void ff(string &s)

{

         return ;

}

void g(const string s)

{

         return ;

}

void gg(string s)

{

         return ;

}

int main()

{

         f("111");

         ff("111");

         g("111");

         gg("11");

         return 0;

}

猜想想上述函数在调用的时候哪些是正确的,哪些是错误的,为什么?

         函数的形参调用有两种,一个是非引用形参,一个是引用形参, f,ff 都是引用形参, g,gg 是非引用形参。 f,g 都用到了 const 限制,意味着形参在函数中是不能改变的。注意这里 const 是一个 string 的形参,而不是一个指针,这就意味着传进来的实参可以是非 const 对象也可以是 const 对象,这个与 const 指针不同:

f(int *p) 只能接受 int* 指针,不能接受 const int*

g(const int *P) 是可以接受 int* const int* 指针的

         我们先看下这 4 个函数他们的使用,都是对“ 111 ”这个字符串进行调用,我们要知道并且要明确一点:字符串字面值的类型就是 const char 类型的数组 。所以 4 个函数都是对一个 const char 数组进行调用。

g 函数形参是 const string s , 实参是 const char ,这个转换是合法的 所以 g 函数是正确使用的。

Gg 函数实参是 string s , 实参是 const char 由于传递给函数的是一个副本,所以不受原来 const 的影响,也是正确的。

f 函数的形参是 const string &s ,实参是 const char ,首先形参是一个引用, s 变成 const char 的引用,所以 s 的类型必须和 const char 一样都是 const 类型。

Ff 函数由于没有使用 const ,在引用后类型不同,这样就改变原来的属性,所以在编译的时候是错误的。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值