码迷,mamicode.com
首页 > 其他好文 > 详细

网上找的一些笔试题

时间:2016-02-26 22:00:01      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:

1.(http://group.jobbole.com/13838/)

搜狗2016研发工程师笔试题

 1 int main(int argc, char *argv[])
 2 {
 3     string a="hello world";
 4     string b=a;
 5     if (a.c_str()==b.c_str())
 6     {
 7         cout<<"true"<<endl;
 8     }
 9     else cout<<"false"<<endl;
10     string c=b;
11     c="";
12     if (a.c_str()==b.c_str())
13     {
14         cout<<"true"<<endl;
15     }
16     else cout<<"false"<<endl;
17     a="";
18     if (a.c_str()==b.c_str())
19     {
20         cout<<"true"<<endl;
21     }
22     else cout<<"false"<<endl;
23     return 0;
24 }

关于代码输出正确的结果是( )

  1. false false false
  2. true false false
  3. true true true
  4. true true false

在我的windows10+tdm gcc 5.x上运行结果是 全 false

 

而根据gdb中调试的结果可以看出,c_str返回的是一个字符指针,也就是说每一个string对象应用此函数的结果都是生成一个字符数组,这个数组的首地址指针被返回,而且根据后续的调试,比如a=""之后的结果来看,这个数组的首地址位置是固定的,也就是说,第一次对a.c_str返回的指针如果是

(gdb) p a.c_str()

$1 = 0x24fe20 "hello world"

 

在a=""之后

(gdb) p a.c_str()

$6 = 0x24fe20 ""

地址没变。

 

所以,上面的所有a和b的c_str结果对比都不相等。

 

另外c++ primer 5 中的知识点,使用b=a和使用b(a)效果相似,是进行的拷贝初始化而非直接初始化,因此两个对象不相同,但是对于重载的==来说,是根据包含的字符相同则返回true。

 

网上找的一些笔试题

标签:

原文地址:http://www.cnblogs.com/lhyz/p/5221893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!