2

Возник один вопросик по Console::Write(), как она себя ведёт при такой форме вызова Console::Write("Строка " + " очень" + "длинная") , будет ли она выводится одним вызовом? Поясню в чём проблема, дело в том что я запускаю в Node.js процесс через spawn и использую вывод STDUOT для получения данных в JSON из программы, и когда я вызывал много Console::Write и в конце Console::WriteLine иногда я ловил исключение в Node.js о непредвиденном окончании JSON, и судя по логу иногда Node.js заканчивал чтение STDUOT после одной из Console::Write(), хотя если запустить программу в консоли то никаких разрывов нету, как я понял между двумя Console::Write() иногда происходит какая-то задержка и Node.js считает что вывод STDUOT закончен. Единственное что сейчас не очень устраивает это то что получаются очень длинные и некрасивые Console::WriteLine(), поэтому хотелось бы их сделать покороче.

αλεχολυτ
  • 28,987
  • 13
  • 60
  • 119

1 Answers1

2

Я думаю, вы имеете в виду C++/CLI.

В этом предложении

Console::Write("Строка " + " очень" + "длинная"); 

сначала вычисляется выражение аргумента, то есть выражение

"Строка " + " очень" + "длинная"

которое создает одну строку из трех строк посредством их конкатенации, и затем эта результирующая строка выводится на консоль функцией Write.

  • С удивлением узнал, в C++/CLI (по крайней мере под Visual Studio 2017) "Строка " + "очень" имеет тип System::String^ (в отличие от просто "Строка очень"). – VladD May 09 '17 at 10:12
  • @VladD Когда создаешь консольное приложения, то функция main автоматически определяется следующим образом int main(array<System::String ^> ^args) :) – Vlad from Moscow May 09 '17 at 10:19
  • Спасибо за ответ, просто т.к. пока что Си знаю плохо возник данный вопрос, будет сначала конкатенация или просто вызовет Console::Write для каждой строки. –  May 09 '17 at 10:26
  • 1
    @vnn198 Сначала вычисляется выражение аргумента, а затем вызывается функция с передачей ей результирующего значения аргумента. То есть пока аргумент не будет вычислен, функция не вызывается. – Vlad from Moscow May 09 '17 at 10:28