在下面的代码中,执行流程永远不会进入while condition和ndx1总是0,原因是什么?
while( int ndx1 = 10 && (ndx1 > 0) )
{
// some statements
ndx1--;
}
答案 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。