Anonymous
мемыы
Vladimir
хнх
Сережа
Синхронизированный, если не вызывать sync_with_stdio(false).
точно, в новом стандарте (C++11 для меня новый)
Anonymous
а стопп
Anonymous
нужно чтоб селф возвращало
Anonymous
чтоб io::stdout() << "meme" << "meme"
Vladimir
идеально
Anonymous
но я на телефоне
Vladimir
use std::io; use std::fmt::Display; use std::fmt::Formatter; use std::fmt::Error; struct cout ; struct endl; impl Display for endl { fn fmt(&self, _: &mut Formatter) -> Result<(), Error> { println!(""); Ok(()) } } impl<T:Display> std::ops::Shl<T> for cout { type Output = cout; fn shl(self, input: T) -> Self { print!("{}", input); self } } fn main() { cout << "privet" << " " << "kak dela " << 23 <<endl; }
Vladimir
с++ дети радуйтесь
Vladimir
Finished dev [unoptimized + debuginfo] target(s) in 0.48 secs Running target/debug/playground Standard Output privet kak dela 23
Anonymous
оооооооо
Vladimir
https://play.rust-lang.org/?gist=2838f9fcc4308e652f54305fd3ba8879&version=stable
Anonymous
как сдохнуть
Сережа
endl еще flush делает
Vladimir
С++ для этого нужно было пару глав раздела
Vladimir
writeln
Vladimir
тоже
Vladimir
покрасней мере должен
Vladimir
хотя там поидее каждый принт должен быть
Cuno
Обычный print! - не должен
Vladimir
ну там дергают одну и ту же функцию под капотом
Vladimir
просто добавляя. \n в конце
Vladimir
так что я делаю вывод что оба флашат)
Cuno
В этом и разнца. stdout буферизируется построчно
Сережа
растодети не знают про ADT, поэтому сравнивают свои поделки с божественной STL, не понимая что не реализовали и 5% от возможного в c++ функционала!
Сережа
бля, ADL
Сережа
напридумывают сокращений
Vladimir
ну блин, если я напишу print!("bla") оно выведет
Anonymous
adl это трешовая идея
Маjко
Со специализацией
Маjко
Всё блять)
Cuno
ну блин, если я напишу print!("bla") оно выведет
https://play.rust-lang.org/?gist=04d478005ae0f7358c25fe0671ee010d&version=stable
Cuno
Если добавить ln, то вывод будет
Cuno
если нет - не будет.
Cuno
При завершении процесса буферы сбрасываются, поэтому и выводит
Сережа
В этом и разнца. stdout буферизируется построчно
std::cout « "1" « "\n" « "2" « std::endl; не построчно!
Cuno
Разбей на 2 строки кода, запусти дебаггер и поставь бряку на 2 строку.
Сережа
это оператор« дважды вызывается
Сережа
а буфферизируется до flush или до переполнения буфера
Cuno
Я понимаю. C++ читать умею.
Cuno
до '\n' оно буферизируется
Cuno
я же говрю, что твой код эквивалентен следующему: std::cout << "1\n"; std::cout << "2" << std::endl;
Сережа
а ты прав, на СО 20 лайков у такого ответа
Cuno
Замечательная метрика.
Сережа
хотя не
Сережа
https://stackoverflow.com/questions/5492380/what-is-the-c-iostream-endl-fiasco/5492605#5492605
Сережа
тут 66 лайков
Сережа
это больше, значит там правда
Cuno
Держи правду
Cuno
https://stackoverflow.com/questions/5492380/what-is-the-c-iostream-endl-fiasco/5492605#5492605
Я не говорил, что std::endl эквивалентно '\n'.
Vladimir
ну т.е. по сути мой endl равносилен с++нутому
Сережа
Сережа
это у тебя компелятор микрософт!
Сережа
Ладно, признаю, ты прав. Я всегда думал, что endl для того и нужен, что он так же флаш делает вместе с новой строкой.
Маjко
Крестодети зарабатывают деньги на языке, базовые вещи из stdlib которого не знают. А потом мы удивляемся почему софт такой дерьмовый и почему Mozilla решила сделать Rust
Vladimir
Я первоначально эмпирически выяснил что и правда флашится после новой строки (ещё вроде во времена Паскаля) а потом почитал какие-то книги по с++ и там сказали что ендл флашит буффер
Michael
cppreference и другие прямо с порога говорят что endl флашит
Vladimir
Так говорят какбудто /n не флашит
Vladimir
Наебалово
でゲソ
\n
Michael
In many implementations, standard output is line-buffered, and writing '\n' causes a flush anyway,
Michael
This manipulator may be used to produce a line of output immediately, e.g. when displaying output from a long-running process, logging activity of multiple threads or logging activity of a program that may crash unexpectedly. An explicit flush of std::cout is also necessary before a call to std::system, if the spawned process performs any screen I/O. In most other usual interactive I/O scenarios, std::endl is redundant when used with std::cout because any input from std::cin, output to std::cerr, or program termination forces a call to std::cout.flush(). Use of std::endl in place of '\n', encouraged by some sources, may significantly degrade output performance. In many implementations, standard output is line-buffered, and writing '\n' causes a flush anyway, unless std::ios::sync_with_stdio(false) was executed. In those situations, unnecessary endl only degrades the performance of file output, not standard output. The code samples on this wiki follow Bjarne Stroustrup and The C++ Core Guidelines in flushing the standard output only where necessary. When an incomplete line of output needs to be flushed, the std::flush manipulator may be used. When every character of output needs to be flushed, the std::unitbuf manipulator may be used.
Vladimir
Т.е. в расте мы живём без честного флаша?
Michael
std::endl флашит, \n - как сложились звёзды в реализации
Michael
да.... х..й его знает как вообще вы тут живёте)
Vladimir
Ты чё на канале Руста забыл
Cuno
Т.е. в расте мы живём без честного флаша?
https://doc.rust-lang.org/std/io/trait.Write.html#tymethod.flush
Vladimir
У нас тут только гошникам рады
Vladimir
https://doc.rust-lang.org/std/io/trait.Write.html#tymethod.flush
Ну эт не в принте, не считово
Vladimir
Кстати принтф флашит?
Alexander
гошники и растеры хехе