游戏开发论坛

 找回密码
 立即注册
搜索
楼主: weisite

问个问题(比较弱)

[复制链接]

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
 楼主| 发表于 2004-10-25 09:21:00 | 显示全部楼层

Re:问个问题(比较弱)

确实是个特殊的,一句话有时候被编译器分成好几句了。 [em19] [em19]


哦!是这样吗?特殊在哪呢?具体是怎样被编译器解释的??

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
 楼主| 发表于 2004-10-25 09:23:00 | 显示全部楼层

Re: Re:问个问题(比较弱)

william9527: Re:问个问题(比较弱)

同意seer的看法,建议楼主不要太在乎这些!


可是有问题就要提出来,大家探讨一下,试着把它解决嘛~~怎能知难而退呀…… [em21]

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
 楼主| 发表于 2004-10-25 09:32:00 | 显示全部楼层

Re: Re:问个问题(比较弱)

seer: Re:问个问题(比较弱)

建议楼主记住,c++里面的各项检查是非常少的,不要太在乎类型。例如
char lambda='a';
lambda+=1;
cout<<lambda;
结果是'b'。


在c++中自有一套自动的类型转换机制,比如你说的字符'a'和1做加法,编译器就会将‘a’理解成它的ASCII码值,然后和1相加,加后又把它转换为char型重新赋给lambda,所以lambda就是‘b’了。
c+中各项类型检查得少呢,是为了灵活性,而且如果编译器每种情况都检查,就降低了编译效率了。再说,我们程序员都干吗去了……

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
 楼主| 发表于 2004-10-25 09:34:00 | 显示全部楼层

Re: Re:问个问题(比较弱)

william9527: Re:问个问题(比较弱)

我所说的C的遗留问题,就是诸如:
char *p = "haha";
我的理解是C++为了兼容C而将这种方式也包...


恩!"haha"确实是C风格得字符串。那const修饰符到底是怎样被编译器理解的呢?我们应该何时,怎样使用它呢? [em5]

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2004-10-25 20:40:00 | 显示全部楼层

Re:问个问题(比较弱)

我一般使用const的地方:
1、声明常量时。
2、作为函数的参数的修饰符,保证在函数中不会改变参数的值。
3、当需要函数中返回一个对象的指针时,我会用const属性保证其他调用不会污染这个对象的数据。
4、无聊的时候用一下,或是想起来的时候用一下。

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2004-10-25 20:48:00 | 显示全部楼层

Re:问个问题(比较弱)

总之不会改变的量最好就用CONST,编译器会对CONST值优化的。
http://www.autsak.com/X_AdvCom_Get.asp?UserID=27

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2004-10-25 22:28:00 | 显示全部楼层

Re:问个问题(比较弱)

ok,weisite
1、你认为下面的可以通过编译运行吗?
const char *p1 = "haha";
char *const p2 = p1;
答案是不行!因为两个指针没有相应的转换!
2、但是,你认为如下的可以通过编译运行吗?
const char *p1 = "haha";
char *const p2 = "good";
ok,可以通过编译运行。你说诸如"haha"这样的字符串是const char*(当然,《C++ primer》也是如此说),但是1为什么不能通过,而2却可以呢?我想诸如“haha”这样的字符串不存在const char*类型(我不知道是不是我们看的这本书写错了,或是翻译问题),不然的话1的结果就不成立了!
3、另外,看看下面的几个东西:
char *p = "haha";
const char *p2 = "good";
char *const p3 = "game";
上面的几个我通过观察其反汇编的代码,发现他们都是使用一样的赋值指令,指令代码也一样。这让我更加相信我上面的推测!
weisite,你觉得如何?应该回答你的疑问了吧?
请大家批评指正。

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
 楼主| 发表于 2004-10-26 10:45:00 | 显示全部楼层

Re: Re:问个问题(比较弱)

william9527: Re:问个问题(比较弱)

ok,weisite
1、你认为下面的可以通过编译运行吗?
const char *p1 = "haha";
char *const p2...


非常感谢!
应该说和我想的一样吧:首先,const对象的地址是无法赋给一个非指向cosnt对象的指针的,这是对的!你和我试的结果都说明了这点。其次,象“haha”这样的字符串常量(或是其结果)应该不是返回了cosnt char*类型的,否则,就和前面我们试的事实相矛盾了。
所以,到目前为止,我相信这应该是翻译或是印刷的错误,由于没看过英文原版的,所以不敢说是作者笔误。可是我仍希望问题得到深入探讨,说不定有更新的发现,说不定我们试的是对的,而书中说的也是对的!只是用了不同的理解方式。
总之,这次的讨论对自己受益匪浅,不仅是知识方面的……但愿大家也都是哦! [em3]

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2004-10-26 19:59:00 | 显示全部楼层

Re:问个问题(比较弱)

weisite,很高兴与你讨论问题,以后多切磋(就是多切,多磋,哈哈哈!)
另外,你是学生还是已经工作的人?反正我是已经工作的人(但是不是计算机业)。
期待着下回的讨论问题!

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
 楼主| 发表于 2004-10-26 23:24:00 | 显示全部楼层

Re: Re:问个问题(比较弱)

william9527: Re:问个问题(比较弱)

weisite,很高兴与你讨论问题,以后多切磋(就是多切,多磋,哈哈哈!)
另外,你是学生还是已经工作的人?反正我是已经工作的人(但是不是计算机业)。
期待着下回的讨论问题!


恩!我也很高兴和你讨论,想了很多,也学到了很多东西!
我现在还是大三学生,也不是学计算机的,就是对做游戏有无限的兴趣,总觉得要做出自己的游戏来,一直在为了这个目标奋斗哦!!
下回有问题一定提出来好好讨论!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-23 00:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表