Другие языки программирования и технологии

Почему операторы printf, scanf работают быстрее cin cout в С++??

Станислав "ex"
Станислав "ex"
4 770
Во-первых, printf и scanf - это всего лишь имена функций, которые лежат в какой то там библиотеке. На каком языке они написаны значения не имеет, поскольку они уже откомпилированы, и представляют из себя объектный код.
Во-вторых, cin и cout не являются операторами, это всего лишь объекты соответствующих классов, а сам ввод/вывод делают операторы << и >> (собственно - тоже функции, и тоже в какой то там библиотеке) .
Когда пишешь printf(строка форматирования, список параметров) , то вызывается один раз соответствующая функция с большим числом параметров.
Аналог с cout вызывает много раз оператор << с парой параметров (cout + один очередной параметр для вывода) .

А дизассемблировать смысла нет, в первом случае будет запихивание параметров в стек и call один раз, во втором - тоже самое, но несколько раз. Все что написали предыдущие постеры - чушь полная, потому что после компиляции у вас будет объектный код (команды центрального процессора) , а каким образом он получился (парадигмы, и пр. ) значения не имеет.
Hrimidalv Voekilebsen
Hrimidalv Voekilebsen
21 360
Лучший ответ
эмм. . потому что это printf и scanf были получены в наследство от С, а два других реализованы по совершенно иной парадигме программирования? А по сути - вы как замеряли, секундомером? лично я не замечал особой разницы
Станислав "ex" Среда выводит время выполнения программы))
Потому что на них уже подключины быблиотеки а при вызове cin, cout надо обращатся к библиотеке .
Серджио Си
Серджио Си
1 430
принтф и сканф реализованы на структурированном программировании, а cout и cin реализованы на объектно ориентированном... .
как известно структурированное выполняется быстрее....
Какие из них работают быстрее, я не знаю. Но если тебе любопытно, то можешь написать четыре программы в каждой из которых напиши по одному из подъопытных. После компиляции дезассемблируй программы (IDA-очень хороший дизасм, или отладчик, если под виной то OllyDebuger) и смотри во что превратились твои операторы. Чем больше машинных команд, а так же в зависимости от самих команд (разные команды выполняюся за разное число тактов) увеличивается время выполнения оператора.