簡體   English   中英

c ++編譯器是否優化0 * x?

[英]Does c++ compiler optimize 0*x?

c ++編譯器是否優化0 * x? 我的意思是它轉換為0還是它實際上是乘法?

謝謝

它可能:

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)] 

它甚至完全優化了變量。

但它可能不會:

struct X
{
    friend void operator *(int first, const X& second)
    {
       std::cout << "HaHa! Fooled the optimizer!";
    }
};

//...
X x;
0 * x;

如果x是基本整數類型,則代碼生成器將使用通常稱為“算術規則”的優化來進行更改,例如:

int x = ...;
y = 0 * x;   ===> y = 0
y = 1 * x;   ===> y = x
y = 2 * x;   ===> y = x + x;

但僅適用於整數類型。

如果x是非整數類型而不是0 * x可能不總是等於0 ,或者可能有副作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM