3

出于效率原因(尽管很小),我想在 if 条件块中声明并分配一个变量。

即而不是说

if(a != 0 && a->b >= 10){
    int c = a->b
    ...
}

我想首先分配 int c 并说

if(a != 0 && (int c = a->b) >= 10){
    ...
}

以最直接的方式(对我而言),我得到编译错误。有谁知道在 C++ 中是否/不可能做到这一点?

4

4 回答 4

4
if(a != 0) {
    int c = a->b;

    if (c >= 10) {
        //using c here
    }

    // common cleanup here
}
于 2012-11-24T23:45:07.943 回答
1

为什么你认为这会优化任何东西?

即使假设您被允许在条件内声明和初始化变量(这在 C++ 中是不可能的,因为编译器想要可以评估的东西并且声明不返回任何内容),这将在每次评估条件时完成(除非你把它短路,你的代码片段就是这种情况)但无论如何都不会改变:你仍然在声明和初始化一个变量,无论在哪里。

于 2012-11-24T23:40:41.720 回答
0

如果您在第一个条件下拥有它,它将起作用。但是,在这种情况下,比较在分配之前,你不会得到你想要的

int a = 3;
int x = 0;
if ( bool b = a > 5 && x < 2) {
printf("%d",b);
}
于 2012-11-24T23:48:53.297 回答
0
int c = (a == 0 ? 0 : a->b);
if(a != 0 && c >= 10){

    ...
}

如果你想避免a->b多次使用。

于 2012-11-25T00:45:08.977 回答