Top.Mail.Ru
Ответы

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

По дате
По рейтингу
Аватар пользователя
Новичок
14лет

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

А дизассемблировать смысла нет, в первом случае будет запихивание параметров в стек и call один раз, во втором - тоже самое, но несколько раз. Все что написали предыдущие постеры - чушь полная, потому что после компиляции у вас будет объектный код (команды центрального процессора) , а каким образом он получился (парадигмы, и пр. ) значения не имеет.

Аватар пользователя
Профи
14лет

Какие из них работают быстрее, я не знаю. Но если тебе любопытно, то можешь написать четыре программы в каждой из которых напиши по одному из подъопытных. После компиляции дезассемблируй программы (IDA-очень хороший дизасм, или отладчик, если под виной то OllyDebuger) и смотри во что превратились твои операторы. Чем больше машинных команд, а так же в зависимости от самих команд (разные команды выполняюся за разное число тактов) увеличивается время выполнения оператора.

Аватар пользователя
Профи
14лет

принтф и сканф реализованы на структурированном программировании, а cout и cin реализованы на объектно ориентированном... .
как известно структурированное выполняется быстрее....

Аватар пользователя
Гуру
14лет

эмм. . потому что это printf и scanf были получены в наследство от С, а два других реализованы по совершенно иной парадигме программирования? А по сути - вы как замеряли, секундомером? лично я не замечал особой разницы

Аватар пользователя
Мастер
14лет

Потому что на них уже подключины быблиотеки а при вызове cin, cout надо обращатся к библиотеке .