Welcome to Leon's Blog  
日历
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
统计
  • 随笔 - 30
  • 文章 - 0
  • 评论 - 51
  • 引用 - 0

导航

常用链接

留言簿(4)

随笔分类

随笔档案

ACM

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 
    快找工作了,从今天开始开始复习C++等知识了。现在遇到了几个奇怪的题目:
   1、
class CLS
{
public:
    
int m_i;
    CLS( 
int i ) //: m_i(i) {}
    {
        m_i 
= i;
    }

    CLS()
    
{
        CLS(
0);
    }

}
;
int main()
{
    CLS obj;
    cout 
<< obj.m_i << endl;
}
问输出是多少?
调试之后,发现在
CLS()
 {
  CLS(0);
 }
中的this指针不同,所以这里可能和c#或者Java不同,当调用CLS(0)的时候,它会重新分配一块空间,并且初始化新对象的m_i=0.
后来在网上搜了一下,找打了这篇文章:http://blog.csdn.net/cnheying/archive/2007/05/16/1611698.aspx 和http://www.cnblogs.com/chio/archive/2007/10/20/931043.html。不知道大家对这道题有什么想法,欢迎讨论!
2、
float a = 1;
    cout 
<< (int)a << endl;
    cout 
<< (int&)a << endl;
    
//cout << *(int*)&a << endl;
    cout << boolalpha << ((int)a == (int&)a) << endl;

    
float b = 0.0f;
    cout 
<< (int)b << endl;
    cout 
<< (int&)b << endl;
    cout 
<< boolalpha << ((int)b == (int&)b) << endl;
    cout 
<< endl;
本来不存在我注释的那一行,考虑(int&)a的时候,发现输出跟想想的不一样,后来发现和*(int*)&a的值是相同的。所以我猜测(int&)a可能首先取a的地址,然后转化成(int*),再去a地址里面的内容,这时是按照int读取的。
3、
    int x = 1;
    
int *= &x;
    
int y = 4;
    cout 
<< (++(*p) < y ? (*p)++: y) << endl;
    cout 
<< x << endl;
 关于三元运算符和++的比较,++的优先级比三元运算符高。我是在VS2005下调试的,通过读汇编代码,发现((*p) ++< y ? (*p)++: y);首先对x+1,然后把值回写的内存中,用原来的之比较,比较晚之后,再从内存中读取出值,进行cout<<(*p)++<<endl;的操作。输出原值后再+1。结果x最终输出3。(这样如果死扣语言,我觉得自己会死人的)。
      如果以上哪里分析的不对,欢迎大家拍砖!!
posted on 2008-10-06 16:00 Leon916 阅读(334) 评论(4)  编辑 收藏 引用 所属分类: c++学习
评论:
  • # re: 网上面试题疑问  canbingzt Posted @ 2008-10-06 17:14
    (int&)a
    是不是引用的意思?  回复  更多评论   

  • # re: 网上面试题疑问  李现民 Posted @ 2008-10-07 16:29
    关于i++的问题,c++的与c#, java的计算规则不一样,真搞不清楚为什么要考这样的东西  回复  更多评论   

  • # re: 网上面试题疑问[未登录]  Xw.Y Posted @ 2008-10-07 16:55
    1.构造函数的调用和实例初始化的次序问题
    2.强类型转换……很奇怪的写法
    3.变量取地址,指针取值,以及++的用法
    也就第一题还能算题吧,其实都是简单概念,很无聊而且很不厚道的题目……没啥意思,  回复  更多评论   

  • # re: 网上面试题疑问  Leon916 Posted @ 2008-10-07 21:51
    (int&)a我觉得不是引用。

    我也实在搞不清楚,为什么公司希望用这些东西来衡量一个人C++语言的水平,但是也没有办法。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © Leon916 Powered by: 博客园 模板提供:沪江博客