正文

const修饰的谁?2007-10-30 11:28:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/aurora/30587.html

分享到:

问题源于今天我于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修饰。

阅读(2660) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册