c ++在条件下声明和测试变量

时间:2015-07-27 17:12:43

标签: c++

在下面的代码中,执行流程永远不会进入while condition和ndx1总是0,原因是什么?

while( int ndx1 = 10 && (ndx1 > 0)   )
{
    // some statements
    ndx1--;
}

3 个答案:

答案 0 :(得分:3)

本声明

while( int ndx1 = 10 && (ndx1 > 0)   )

相当于

while( int ndx1 = ( 10 && (ndx1 > 0) )   )

这是表达式(ndx1声明中使用的初始化程序)

( 10 && (ndx1 > 0) )

使用具有不确定值的未初始​​化的变量ndx1本身。结果是程序行为未定义。

答案 1 :(得分:0)

该行

  function LoginController($scope) {
    $scope.isButtonClicked = false; 
    $scope.login = function () {
        if($scope.isButtonClicked === false){
            $scope.isButtonClicked = true
             var request = $http({
                        dataType: 'json',
                        method: "post",
                        url: "/xxx.php",
                        data: {
                            data1: $scope.data1,
                            data2: $scope.data2
                        },
                        headers: { 'Content-Type': 'application/json' }
                    });
            request.success(function (data) {       
                /* note i try puting a delay in the top, but idk why this cant work */
            });
        }  
    };
}

被解释为:

while( int ndx1 = 10 && (ndx1 > 0)   )

由于在初始化之前使用了while( int ndx1 = (10 && (ndx1 > 0)) ) ,因此会受到未定义的行为。

ndx1循环将更好地满足您的需求。

for

答案 2 :(得分:0)

短路AND(&&)的优先级高于赋值(=),因此您将ndx1分配给10 && (ndx1 > 0),其中包含{ndx1 1}}。这是未定义的行为,因为ndx1尚未在第一次迭代时初始化。通过偶然事件,它在第一次迭代时可能为零,因此10 && (ndx1 > 0)计算为false,分配给ndx1,而while条件失败,因此永远不会输入循环。

请参阅http://en.cppreference.com/w/cpp/language/operator_precedence