const char* const 问题
来源:互联网 发布:梦龙网络计划流水 编辑:程序博客网 时间:2024/06/06 11:00
这是很经典的问题,很多C语言的初级面试都会碰到。今天在这里重提是因为我以前一直没有真正理解,我是死记得:
const char* p: p指向的内容是常量,但是p是常量指针
char* const p: p指向的内容是变量,但是p是指针常量
因为我没有真正理解,所以稍微一变化我就傻了:
template <class T>
void getStrT(const T& val) {…} //
void getStr(const char*& val){…} //
const char* p="This is Arrowpig!";
getStr(strdup(p)); //1.
getStrT(strdup(p)); //2.
结果getStrT是成功编译的,但是 getStr碰到编译错:
error: invalid initialization of non-const reference of type ‘const char*&’ from a temporary of type ‘char*’
我诈一看,getStr和getStrT一样的啊,T不就是char* 吗,那const T& 不就是const char* &吗!李楠倒是一针见血的就指出来区别const T& => const (char*)& 。后来我跟徐晨再过了一遍,变量定义的方式是和将来使用变量的方式一样的!
例子:
const char*& p: 把该定义看成表达式求值,*,&都是单元运算符,右结合–>(const char)(*(&p))。p是一个引用,引用的对象是指针,对指针解引用后得到的类型是const char,所以指针指向的内容是const。
const T& p: 把定义看成表达式求值–> (const T)(&p), p是引用,引用的类型是const T,当T=char *的时候等价const (char*),指针本身是const。–>引用的类型是指针常量。
好,回过头来看,strdup返回char*, 但是由于我直接把strdup放在参数中,char* 是个临时变量,C++编译器会自动给临时变量赋于const属性,所以gcc报的错误中a temporary of type ‘char*’的意思就是 const (char*)= char * const。当我们调用getStr的时候,我们试图把 指针常量 转成 常量指针的引用,所以就出错了。但是当调用getStrT时,我们试图把 指针常量 转成 指针常量的引用,当然是可以的。
- const char* const 问题
- const char*, char const*, char*const的区别问题
- const char*的问题
- const char*,char *const,const char*const
- const char*,char *const,const char*const
- const char & char const
- const char* char*const
- 关于operator const char *() const的问题
- const char*, char const* and char *const
- const char*, char const* and char *const
- const char* ; char const *; char* const;
- const char*, char const* and char *const
- 关于const char*, char const*, char*const
- const char*, char const*, char*const
- const char, const char*, char* const
- const char * char const * char * const
- const char*, char const*, char*const
- const char*, char const*, char*const
- 产品生产环节的一些名词
- oracle 启动多个实例
- VPS技术原理
- Timer的C++实现
- 如何在ns2中实现一个简单的网络协议-转
- const char* const 问题
- Typename in C++ Template
- C语言extern声明辨析
- Linux软连接和硬链接
- C++异常处理的三个境界
- VPS技术原理
- 字符编码笔记:ASCII,Unicode和UTF-8
- PLSQL语言基础
- OpenSceneGraph(OSG) — 概述