这段代码,会被优化吗?

Longerandlonger 2010-08-02 09:38:01
vector<char> a, b;

……

size_t len = a.size() > b .size () ? a.size() : b.size();

后面的那句,a、b的size()函数使用了多次,编译器不会愚蠢到每次都去计算吧?会不会产生一个临时变量储存a.size()?

很想知道,编译器到底怎么对代码进行优化的。
...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenny_chen 2010-08-02
  • 打赏
  • 举报
回复
根据这个上下文完全可以被优化掉。
另外,这里三目表达式的分支也能通过带条件的mov——cmov给解决掉。
liutengfeigo 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 taodm 的回复:]

那个,自己看反汇编吧。
[/Quote]
+1
cd2108006026 2010-08-02
  • 打赏
  • 举报
回复
不会反复计算。
size()是内联的。最多是每次都做个减法运算:storage_end - storage_begin
taodm 2010-08-02
  • 打赏
  • 举报
回复
那个,自己看反汇编吧。
ayw215 2010-08-02
  • 打赏
  • 举报
回复
看看编译出来的汇编呢?
vector的大小是动态可以改变的,最好不要假设编译器帮你做了
ForestDB 2010-08-02
  • 打赏
  • 举报
回复
个人认为最后就是一个return this._size;(有_size这样一个变量,在做各种操作的时候已经更新了_size,在调用size()的时候只要返回它就可以了。)
jackyjkchen 2010-08-02
  • 打赏
  • 举报
回复
一般这种函数都会内联,比如CString的GetLength()也是

普通函数的话,如果打开了类似于VC中/Ob2这样的选项,在编译器认为适合的情况下,也会内联的

不过内联与否并不绝对,如果想精确控制,请自己处理

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧