C++中三元运算符初始化变量的限制问题

问题描述 投票:0回答:0

我一直在尝试练习用三元运算符替换我的某些代码中的 if 语句。这导致发现了一个我不明白的奇怪行为。

void plusMinus(vector<int> arr) {
 float pos, neg, zero;
 for(int num : arr){
     num <=0 ? (num == 0 ? zero++ : neg++) : pos++;
 }
 cout << pos/arr.size() << endl << neg/arr.size() << endl <<zero/arr.size() << endl;
}

使用两个不同的向量:[-4, 3, -9, 0, 4, 1] 和 [1, 2, 3, -1, -2, -3, 0, 0]。第一个打印 -nan、.333 和 .1667。第二个输出 0.375、0.375、0.25。但是,如果我在声明中初始化 pos 如下所示,该函数每次都能完美运行。

void plusMinus(vector<int> arr) {
 float pos=0, neg, zero;
 for(int num : arr){
     num <=0 ? (num == 0 ? zero++ : neg++) : pos++;
 }
 cout << pos/arr.size() << endl << neg/arr.size() << endl <<zero/arr.size() << endl;
}

三元运算符是否有一些限制,或者这只是我正在使用的网络编译器的限制?

c++ initialization conditional-operator
© www.soinside.com 2019 - 2024. All rights reserved.