使用三元运算符写入流?在C++中

Pet*_* D. 2 c++ stream ternary-operator

我有几点类型double.我想在流中写它们时才将它们写在流中0.我还要说它是哪一个,像这样:

x1=" value "

y1=" value " 等等..

有没有办法像这样做:

    << ( (x1 != 0) ?  ( "x1=\"" << x1 << '"' )  : ' ') )
    << ( (y1 != 0) ?  ( "y1=\"" << y1 << '"' )  : ' ') )
Run Code Online (Sandbox Code Playgroud)

或者我必须做几个if else陈述?

Rem*_*eau 6

代码将无法正常工作.运算?:符的两个操作数必须评估为相同的数据类型.在你的例子中:

  • 左操作数甚至不是有效代码.类似( "x1=\"" << x1 << '"' )的表达式无效,因为您无法将a double或a 流式传输char到字符串文字(相当于a const char[]).但如果它是有效的代码,它将评估为a std::ostream&,这是<<运算符的标准输出类型.

  • 右操作数是一个char.

由于它们不匹配类型,因此无法使用?:.您将不得不使用if语句来分解代码:

if (x1 != 0)
    mystream << "x1=\"" << x1 << '"';
else
    mystream << ' ';

if (y1 != 0)
    mystream << "y1=\"" << y1 << '"';
else
    mystream << ' ';
Run Code Online (Sandbox Code Playgroud)

  • 不仅如此`("x1 = \""<< x1 <<'"')`本身就是一个表达式,但它不对.你不能在字符串文字和`double`之间使用`<<`. (2认同)