首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++编译器会优化0*x吗?

c++编译器会优化0*x吗?
EN

Stack Overflow用户
提问于 2012-07-15 12:55:06
回答 2查看 1.2K关注 0票数 7

c++编译器会优化0*x吗?我的意思是,它是转换为0,还是做乘法运算?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-07-15 12:56:15

它可能:

代码语言:javascript
运行
AI代码解释
复制
int x = 3;
int k = 0 * 3;
std::cout << k;

00291000  mov         ecx,dword ptr [__imp_std::cout (29203Ch)] 
00291006  push        0    
00291008  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (292038h)] 

它甚至完全优化了变量。

但它可能不会:

代码语言:javascript
运行
AI代码解释
复制
struct X
{
    friend void operator *(int first, const X& second)
    {
       std::cout << "HaHa! Fooled the optimizer!";
    }
};

//...
X x;
0 * x;
票数 7
EN

Stack Overflow用户

发布于 2012-07-15 13:53:18

如果x是一个基本的整数类型,那么代码生成器将使用通常称为“算术规则”的优化来进行如下更改:

代码语言:javascript
运行
AI代码解释
复制
int x = ...;
y = 0 * x;   ===> y = 0
y = 1 * x;   ===> y = x
y = 2 * x;   ===> y = x + x;

但仅适用于整型。

如果x是非整数类型,则0 * x可能并不总是等于0,或者可能有副作用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11492081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档