const修饰的谁?

问题源于今天我于csdn上看到的一个帖子:

const引用的疑惑

例子1:
#include   <iostream >
#include   <typeinfo >
using namespace std;

typedef char* PCHAR ;
int main(int argc, char *argv[])
{
    cout < <typeid(const PCHAR).name() < <endl;
    cout < <typeid(const char*).name() < <endl;
    return 0;

输出结果:
char *
char const *
应该两者都是char const *类型啊? 为什么不一样?

例子2:
#include  <iostream >
#include  <typeinfo >
using namespace std;

template <class T >
void TestFunc2(const T &pConstRef)
{
cout  < < pConstRef  < <endl;
pConstRef[0] =  'S '; cout  < < pConstRef  < < endl;
}

int main(int argc, char *argv[])
{

char pBuf[100] = "suntao";
char* pNonConst =  pBuf;
TestFunc2(pNonConst);

  system("PAUSE");
  return EXIT_SUCCESS;
}
问题: 虽然我传入的是一个非const引用,但TestFunc2的参数是一个const引用,为什么可以修改pConstRef指向的内存?

这使我想起《C++ Primer》上的一段话(p104   3.12):

“下面是一个几乎所有人刚开始时都会答错的问题,错误在于将typedef 当作宏扩展。已知下面的typedef:
typedef char *cstring;
在以下声明中cstr 的类型是什么?
extern const cstring cstr;
第一个回答差不多都是:
const char *cstr
即指向const 字符的指针。但是这是不正确的。const 修饰cstr 的类型。cstr 是一个指针,因此,这个定义声明了cstr 是一个指向字符的const 指针char *const cstr;”

所以基本上清楚了,发帖的人没搞明白typedef的含义。
const T &pConstRef 即 T const &pConstRef . 这里的const好像是多余的。引用本来就不必用const修饰。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值