2016-05-22 62 views
3
int main() { 
    int x = 1, y = 2, z = 3, w = 4; 
#define formula x + y * z % w 
    x++; 
    do_something1(formula); 
    y++; 
    do_something2(formula); 
    z++; 
    do_something3(formula); 
    w++; 
    do_something4(formula); 
#undef formula 
    return 0; 
} 

我目前使用#define来防止重复长右值。有没有更好的替代方法来做到这一点?如何防止重复长右值

+2

你知道的功能是什么?如果是这样,为什么不写一个函数来进行公式所需的计算? – Peter

+0

'int formula(int x,int y,int z,int w){return x + y * z%w; }' –

回答

6

使用lambda表达:

int main() { 
    int x = 1, y = 2, z = 3, w = 4; 
    auto formula = [&] { return x + y * z % w; }; 
    x++; 
    do_something1(formula()); 
    y++; 
    do_something2(formula()); 
    z++; 
    do_something3(formula()); 
    w++; 
    do_something4(formula()); 
    return 0; 
}