如果变量的值为零,C++应避免将其传递给std::cout

C++ Avoid passing variable to std::cout if its value is zero

本文关键字:cout std 变量 C++ 如果      更新时间:2023-10-16

假设我有一个变量double x,作为一些计算的结果,它可以有任何值,包括零,我需要将它传递给std::cout。如果x的值为零,我如何避免打印它?

例如,如果是x,则打印1+<value_of_x>,否则仅打印1:

std::cout << (x ? "1+" : "1") << x << 'n';

除了x,还有什么方法可以做到同样的吗?类似以下无稽之谈:

std::cout << (x ? ("1+" << x) : "1") << 'n';

我可能应该补充一点,我在C++方面并不先进。

你可以说

std::cout << (x ? "1+" + std::to_string(x) : "1") << 'n';

但是

if (x)
    std::cout << "1+" << x << 'n';
else
    std::cout << "1" << 'n';

也许可读性更强
(我认为这在很大程度上是个人偏好的问题。(

如果x为0,则不打印:

if (x != 0)
    std::cout << x << 'n';

任何进一步的变化都应该是不言自明的。

使用if语句是一种简单易读的方法:

if (x)
    std::cout << "1+" << x;
else
    std::cout << "1";
std::cout << 'n';

甚至:

std::cout << "1";
if (x) std::cout << "+" << x;
std::cout << 'n';

但是,如果你真的想以内联方式打印出值,你可以定义一个自定义的operator<<来格式化你想要的值:

struct to_coefficient_str
{
    double m_value;
    to_coefficient_str(double value) : m_value(value) {}
    void print(std::ostream &out) const
    {
        out << "1";
        if (m_value)
            out << "+" << m_value;
    }
};
std::ostream& operator<<(std::ostream &out, const to_coefficient_str &ce)
{
    ce.print(out);
    return out;
}

然后你可以这样使用它:

std::cout << to_coefficient_str(x) << 'n';