引用与指针

这篇文章展示C++中引用和指针的关系.

  1. //==============================
  2. typedef struct _tag_ref
  3. {
  4.  union{
  5.   void *p;
  6.   std::string &r;
  7.  };
  8.  _tag_ref(std::string &s):r(s){};
  9. }REF;
  10. std::string & refparam(REF& ref);
  11. //==============================
  12. std::string & refparam(REF& ref)
  13. {
  14.  std::cout << std::hex << ref.p << std::endl;
  15.  return ref.r;
  16. }
  17. //==============================
  18.  {
  19.   std::string s("addr");
  20.   REF ref(s);
  21.   refparam(ref);
  22.   std::cout << std::hex << &s << std::endl;
  23.  }

今天看了C++ Template一书,书中提到string literal和reference在进行类型推导时的区别。

这个可能是引用比较特别的地方吧。

  1. template<typename T>
  2. inline T const& max(T const& a, T const& b)
  3. {
  4.   return (a > b) ? a : b;
  5. }
  6. //string literal
  7. max("abc""abcd"); 
  8. //失败,因为"abc"和"abcd"的类型不同
  9. //一个是char const[3],另一个是char const[4]
  10. //如果把模板改成传值
  11. template<typename T>
  12. inline T max(T a, T b)
  13. {
  14.   return (a > b)? a : b;
  15. }
  16. max("abc""abcd");
  17. //成功,参数会被推导成char const*;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值