为什么我不能在条件运算符中计算出 endl?

Why can't I cout an endl in a conditional operator?

我正在尝试使用 for 循环打印以逗号分隔的数字列表,但我不希望在最后一个数字之后有一个逗号,相反,我希望有一个 endl.

我有这个代码:

for (int j = i; j > 0; j--) {
    // Should print 9, 8, 7, 6, 5, 4, 3, 2, 1[endl]
    cout << j << (j > 1 ? ", " : endl);
}

但是,我得到一个编译错误

error: overloaded function with no contextual type information
    cout << j << (j > 1 ? ", " : endl);
                                 ^~~~

我包含了 iostream,endl 在程序的其他部分工作正常,用 "\n" 替换 endl 工作正常...

我只想知道为什么会出现这个错误

它们的类型必须相同。请改用 "\n"

for (int j = i; j > 0; j--) {
    // Should print 9, 8, 7, 6, 5, 4, 3, 2, 1[endl]
    cout << j << (j > 1 ? ", " : "\n");
}

endl 是一个添加 \n 然后刷新流的函数,它不是字符串。因此,您不能将它与另一个字符串一起用于三元组,因为它们的类型不同。

for (int j = i; j > 1; j--) {
    // Prints 9, 8, 7 ,6, 5, 4, 3, 2, 
    cout << j << ", ";
}
cout << 1 << endl;

当然需要处理i小于1的情况。

另一个选项是你的"\n"

条件运算符 ?:;只能 return 相同类型。 endl 不是 char* 但 "\n" 是。