Вывод в поток данных при выполнении условий (использование тернарной операции)

115
18 августа 2019, 03:50

Подскажите можно ли как-то записать в 1 строчку следующий код:

std::cout << "info: ";
if (isEq)
    std::cout << "value: " << value1 << std::endl;
else
    std::cout << "data: " << data1 << std::endl;

На что-то подобное

std::cout << "info " << ((isEq) ? ("value: " << value1) : ("data: " << data1)) << std::endl;
Answer 1

Можно, но не так - так у вас получается

("value: " << value1)

но оператор << к строке неприменим.

А вот так - да:

std::cout << "info " << (isEq ? "value: " : "data: ")
    << (isEq ? value1 : data1) << std::endl;

Понятно, что типы value1 и data должны быть совместимыми - например, int и double - будет выполнено приведение, как в арифметическом выражении. Если несовместимые - то вернитесь к своей первой (более понятной) записи.

Answer 2

Можно:

std::cout << "info: " << (isEq ? ("value: " + std::to_string(value1)) : ("data: " + std::to_string(data1))) << std::endl;

Но мне кажется, читаемость получившегося кода намного хуже того, что приведено у вас :) .

READ ALSO
Как работает union? [дубликат]

Как работает union? [дубликат]

На данный вопрос уже ответили:

133
Зачем нужен флаг /EHsc для MSVC компилятора?

Зачем нужен флаг /EHsc для MSVC компилятора?

Зачем нужен флаг /EHsc для MSVC компилятора? Недавно увидел его в конфиге, почитал доки, но так и не понял о каких синхронных/асинхронных исключениях...

106
Объявление структуры С++ с typedef

Объявление структуры С++ с typedef

Постоянно вижу в различных учебниках такой синтаксис объявления структур

119