C++,三元运算符,std::cout

Posted

技术标签:

【中文标题】C++,三元运算符,std::cout【英文标题】:C++, ternary operator, std::cout 【发布时间】:2011-09-30 11:04:21 【问题描述】:

如何使用 C++ 用三元运算符编写以下条件

int condition1, condition2, condition3;
int / double result; //int or double
....
std::cout << ( condition1: result1 : "Error" ) 
          << ( condition2: result2 : "Error" )
          << ( condition3: result3 : "Error")...;

【问题讨论】:

三元运算符是 cond ? exp1 : exp2 。你用过: :除此之外,我觉得没什么好说的了! @Diff:哦,是的,有,看我的回答 【参考方案1】:

取决于result1, result2等是什么类型

expressionC ? expression1 : expression2 并非对所有类型的expression1expression2 都有效。粗略地说,它们必须可以转换为通用类型(可以在标准中阅读确切的规则和例外情况)。现在,如果results 是字符串,那么你可以这样做:

std::cout << ( condition1 ? result1 : "Error" ) 
                         ^^^
          << ( condition2 ? result2 : "Error") 
                         ^^^
          << etc.

但如果结果是整数,例如,你不能这样做。

HTH

【讨论】:

那么将结果转换为字符呢? @Johnas:不,那不行。 "Error" 的类型为 const char[6]charconst char[6] 是不同的不兼容类型 感谢您的帮助和 cmets。 从 C++11 开始,如果 result1 的类型是 int、double 或 to_string() 接受的其他类型,您可以执行 (condition1 ? to_string(result1) : string("Error"))。我不知道这是否是一个好习惯,但至少对于快速调试等来说应该没问题。虽然对 C++ 很陌生,如果我错了,请纠正我 @NotEnoughData 是的,您确实可以使用to_string,但是您的格式可能无法正常工作,例如使用scientific 将不起作用。【参考方案2】:

尝试使用condition ? true-value : false-value

【讨论】:

以上是关于C++,三元运算符,std::cout的主要内容,如果未能解决你的问题,请参考以下文章

三元运算符的返回类型是如何确定的? [复制]

返回引用时的 C++ 三元运算符

具有范围解析和条件的 C++ 三元运算符

在 C++ 中创建对三元运算符结果的 const 引用是不是安全?

在 C++ 三元运算符中使用字符串常量是对非左值数组的无效使用吗?

没有第二个操作数的三元运算符[重复]