为什么这会导致以粗体显示编译问题?
const list = async function(end_cursor) {
if (!end_cursor) {
return await db.discovery.where('_id').sort({ _id: -1 }).limit(50);
}
return await db.discovery.where('_id').lt(end_cursor).sort({ _id: -1 }).limit(50);
}
编译消息:
#include<iostream>
static int i = 10;
int main() {
**(i) ? (std::cout << "First i = " << i << std::endl) : ( i = 10);**
std::cout << "Second i = " << i << std::endl;
}
答案 0 :(得分:3)
您对三元运算符的使用有点奇怪:基于i
的值,您可以将内容打印到std::cout
或为其分配一个新值。这些动作不会通过表达式的返回值共享连接,因此请不要这样。使用三元运算符时,最好使其更接近其预期的目的:使用一个基于简单谓词的分派对两个可能的表达式进行简短表示。示例:
const int n = i == 0 ? 42 : 43;
您的代码应如下所示:
if (i == 0)
i = 10;
else
std::cout << "First i = " << i << "\n";
原始代码段未编译的原因是没有三元运算符的公共返回类型。 “公共”表示两个表达式都可以转换为返回类型。例如,在const int n = i == 0 ? 42 : 43;
中,返回类型为int
。
答案 1 :(得分:1)
问题出在以下事实:条件运算符(三元运算符)中的表达式的返回值(对于std::ofstream
,std::cout ...
和{ int
的{1}}不兼容,因此条件运算符的格式不正确。请检查条件运算符的the rules for return type。
在这种情况下,只需使用常规条件即可:
i = 10