遇君阁

前不见古人,后不见来者
念天地之悠悠,独怆然而涕下

  VC知识库BLOG :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  26 随笔 :: 8 文章 :: 53 评论 :: 0 Trackbacks
<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

留言簿(0)

随笔分类

随笔档案

文章分类

文章档案

相册

相关链接

搜索

最新评论

阅读排行榜

评论排行榜

有一次我在VS中遇到这样的一个编译错误,代码如下(程序1):
typedef char * string;

class A
{
private:
 char value[256];
public:
 const string getValue() const
 {
  return value;
 }
};

int _tmain(int argc, _TCHAR* argv[])
{
 return 0;
}
编译错误:error C2440: 'return' : cannot convert from 'const char [256]' to 'const string'
为什么会有这样的编译错误呢?不是数组名可以转换成一个指针吗(此主题可参考),按此原理类推应该可以实现此类型转换。于是我改写代码(程序2):
typedef char * string;

class A
{
private:
 char value[256];
public:
 const char * getValue() const
 {
  return value;
 }
};

int _tmain(int argc, _TCHAR* argv[])
{
 return 0;
}
这时编译这段代码却没有错误乐。为什么呢?原因在于在程序1中const从整体上修饰类型别名string(char *),那么就相当于char * const,表示char类型的指针为常量,所以就出现上述的编译错误。错误的根本原因就是我把typedef主观认为可以与#define等同,而typedef实际上却是定义一种类型的别名,而不只是简单的宏替换。这次经历也告诉我一个道理:不能凭主观或者说错误的观点进行推测,而应该认识到实践才是检验真理的唯一标准。

posted on 2008-05-14 12:55 遇君阁 阅读(1429) 评论(5)  编辑 收藏

评论

# re: 遇到const修饰typedef所定义的类型时,请注意! 2008-05-14 19:17 gaoqing000

难道先返回的是常量指针,后返回的是常量char



# re: 遇到const修饰typedef所定义的类型时,请注意! 2008-05-15 11:27 遇君阁
const string 返回的是常量指针
const char *返回的是常量char

# re: 遇到const修饰typedef所定义的类型时,请注意! 2008-05-15 12:27 zdd
面试的时候经考这个知识点

# re: 遇到const修饰typedef所定义的类型时,请注意! 2008-05-15 12:27 zdd
面试的时候经考这个知识点

# re: 遇到const修饰typedef所定义的类型时,请注意! 2008-05-16 09:57 清风雨
其实我个人认为面试把主要精力放在考察这种细节上,是一个不正确的导向,适度考察一下就可以了。
至少我以前出题时,就只是顺带。所以,我也比较相信应该有很多公司并不是真的在扣这种死细节!
不过,基础是很重要的,我自己看书一般都是学基础。
个人看法,仅供参考。


标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]