繁体   English   中英

为什么我不能将声明和逻辑运算符放在一起?

[英]Why I can't have declaration and logical operator together?

出于效率原因(虽然非常小)我想在if条件块中声明并分配一个变量。

也就是说,而不是说

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

我想在第一时间分配int c并说

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

以最简单的方式(对我而言),我得到了编译错误。 有谁知道在c ++中是否/不可能这样做?

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

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

    // common cleanup here
}

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

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

如果你在第一个条件下有它,它会工作。 但是,在这种情况下,比较先于作业,你不会得到你想要的

int a = 3;
int x = 0;
if ( bool b = a > 5 && x < 2) {
printf("%d",b);
}
int c = (a == 0 ? 0 : a->b);
if(a != 0 && c >= 10){

    ...
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM