一亩三分地《新生手册+美国生活指南》下载

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货

最近看过此主题的会员

E轮2.5亿美元融资
K12教育独角兽一起作业
北京-诚聘人工智能/教育/大数据岗
码农求职神器Triplebyte:
不用海投
内推多家公司面试
前Google华人高管创立
面试offer一键直通
Leap.ai助你进入热门独角兽
查看: 857|回复: 5
收起左侧

无人车相关c++问题

[复制链接] |试试Instant~ |关注本帖
我的人缘0
foreverzad 发表于 2017-12-4 15:29:44 | 显示全部楼层 |阅读模式
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  91% (11)
 
 
8% (1)  踩

2017(10-12月) 码农类General 博士 全职@无人车相关 - 网上海投 - 技术电面  | Other | 在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
请问哪位大神解释下这个为什么 reference 是float 或者double 输出不一样。。。面试的时候直接敲出来了,但不懂 . from: 1point3acres
int main(int argc, const char * argv[])
{  
   double foo = 4.0;
    const float& bar = foo;
    foo += 2.1234; 来源一亩.三分地论坛.
    cout << bar << endl;. 围观我们@1point 3 acres
    cout << foo << endl;
}

评分

参与人数 1大米 +1 收起 理由
Pony_s + 1 给你点个赞!

查看全部评分


上一篇:领英昂赛
下一篇:领英电面
我的人缘0
magicsets 发表于 2017-12-5 04:36:50 | 显示全部楼层
本楼: 【顶】   100% (2)
 
 
0% (0)   【踩】
全局: 顶  97% (235)
 
 
2% (6)  踩
楼上说的已经回答了问题... 我稍微补充一点例子

(1) 考虑这么一个程序:
  1. int main(int argc, const char * argv[]) {
  2.   double foo = 4.0;
  3.   const float& float_bar = foo;
  4.   const double& double_bar = foo;-google 1point3acres

  5.   cout << "foo addr = " << &foo << "\n";
  6.   cout << "float bar addr = " << &float_bar << "\n";
  7.   cout << "double bar addr = " << &double_bar << "\n";. more info on 1point3acres

  8.   foo += 2.1234;
  9. }
复制代码


那么输出会像这样:
  1. foo addr = 0x7ffeefbff668
  2. float bar addr = 0x7ffeefbff65c.1point3acres网
  3. double bar addr = 0x7ffeefbff668. more info on 1point3acres
复制代码


也就是foo和double_bar的地址是一样的,而float_bar是另一个地址。

这涉及到C++的一个特性(不知道算不算坑,我感觉挺好用的):常量左值引用可以绑定到右值. from: 1point3acres
. 1point 3acres 论坛
在上面的例子中,double_bar绑定的是左值引用,而float_bar由于要做implicit conversion所以绑定到了conversion后的右值——也就是一个新地址上。

(2)
更多一点的关于左值右值的例子:

  1. int main(int argc, const char * argv[]) {
  2.   double foo = 4.0;.本文原创自1point3acres论坛

  3.   // float& float_lvalue_bar = foo;                         // 编译错误
  4.   const float& const_float_lvalue_bar = foo;                // OK. visit 1point3acres for more.
  5.   float&& float_rvalue_bar = foo;                           // OK
  6.   const float&& const_float_rvalue_bar = foo;               // OK

  7.   double& double_lvalue_bar = foo;                          // OK
  8.   const double& const_double_lvalue_bar = foo;              // OK
  9.   // double&& double_rvalue_bar = foo;                      // 编译错误
  10.   double&& double_rvalue_bar = std::move(foo);              // 编译错误
  11.   // const double&& const_double_rvalue_bar = foo;          // 编译错误
  12.   const double&& const_double_rvalue_bar = std::move(foo);  // OK

  13.   foo += 2.1234;

  14.   cout << "const_float_lvalue_bar = " << const_float_lvalue_bar << endl;.留学论坛-一亩-三分地
  15.   cout << "float_rvalue_bar = " << float_rvalue_bar << endl;
  16.   cout << "const_float_rvalue_bar = " << const_float_rvalue_bar << endl;.1point3acres网
  17.   cout << endl;.1point3acres网
  18. -google 1point3acres
  19.   cout << "double_lvalue_bar = " << double_lvalue_bar << endl;. 一亩-三分-地,独家发布
  20.   cout << "const_double_lvalue_bar = " << const_double_lvalue_bar << endl;
  21.   cout << "double_rvalue_bar = " << double_rvalue_bar << endl;. more info on 1point3acres
  22.   cout << "const_double_rvalue_bar = " << const_double_rvalue_bar << endl;
  23. }
复制代码


输出:
  1. const_float_lvalue_bar = 4.本文原创自1point3acres论坛
  2. float_rvalue_bar = 4
  3. const_float_rvalue_bar = 4

  4. double_lvalue_bar = 6.1234. visit 1point3acres for more.
  5. const_double_lvalue_bar = 6.1234
  6. double_rvalue_bar = 6.1234
  7. const_double_rvalue_bar = 6.1234
复制代码

补充内容 (2017-12-5 04:39):
注释掉的代码才是编译错误,有一行笔误没注释但标注了编译错误... 应该是标注OK
回复

使用道具 举报

我的人缘0
helloterran 发表于 2017-12-4 15:48:52 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  92% (48)
 
 
7% (4)  踩
http://en.cppreference.com/w/cpp/language/reference_initialization

If object is an lvalue expression, and its type is implicitly convertible to a type that is either T or derived from T, equally or less cv-qualified, then the non-explicit conversion functions of the source type and its base classes that return lvalue references are considered and the best one is selected by overload resolution. The reference is then bound to the object identified by the lvalue returned by the conversion function (or to its base class subobject)

你的bar和foo不是一个type,所以bar绑定给了double->float implicit conversion生成的float 右值。也所以bar必须是const
回复

使用道具 举报

我的人缘0
davidpy 发表于 2017-12-5 04:59:17 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  94% (16)
 
 
5% (1)  踩
请问这是zoox的店面题吗,lz又后续吗
回复

使用道具 举报

我的人缘0
 楼主| foreverzad 发表于 2017-12-5 05:20:50 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  91% (11)
 
 
8% (1)  踩
davidpy 发表于 2017-12-5 04:59. 1point 3acres 论坛
请问这是zoox的店面题吗,lz又后续吗

不是,我已经挂了.

21.000+ students read the Road to learn React. The course weaves all the opinionated roadmaps into one roadmap to master React. It gives you all the fundamentals in React. You will build a Hacker News App along the way.

回复

使用道具 举报

我的人缘0
 楼主| foreverzad 发表于 2017-12-5 05:23:13 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  91% (11)
 
 
8% (1)  踩
谢谢大神们的讲解和例子~~总算看懂了
回复

使用道具 举报

游客
请先登录

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|小黑屋|一亩三分地论坛声明

GMT+8, 2018-8-18 05:14

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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