Ո՞րն է հիմնական տարբերությունը std :: cout- ի և fprintf- ի միջև C ++ ում: Մեկը մյուսից ավելի լավն է կամ արագ:


պատասխանել 1:

Std :: cout- ով ծանրաբեռնված օպերատորը կոչվում է փաստարկ, իսկ fprintf- ով `փաստարկը վերածվում է տողի: Այնուամենայնիվ, երկուսի հիմնական տրամաբանությունը մնում է նույնը:

cstdio- ն ավելի արագ է համաժամացման հետ միացված, բայց iostream- ը ավելի արագ կլինի, իսկ որոշ դեպքերում էլ ՝ շատ ավելի արագ, եթե անջատեք երկուսի միջև համաժամացումը: Լավ C ++ կոդով պետք է օգտագործվի միայն iostream- ը: Հետևաբար, համաժամացումը կարող եք անջատել `զանգահարելով std :: ios :: sync_with_stdio (կեղծ):

ՆՇՈՒՄ

Հակառակ ժողովրդական համոզմունքի, C ++ իրականացումը գրեթե միշտ ավելի լավն է `կազմողի օպտիմալացման շնորհիվ, եթե նույն ֆունկցիոնալությունը հասանելի է C ++ գրադարանների և C գրադարանների համար:


պատասխանել 2:

Այո, std :: cout- ն ավելի լավ է: Դա std :: ostream- ն է, ինչպես std :: stringstream- ը, որը նման է տպիչի տարբերակին, որը կոչվում է sprintf:

Printf- ի հետ կապված կան մի քանի խնդիրներ:

  1. Այն օգտագործում է ձևաչափի տող ոչ միայն ցույց տալու համար, թե ինչպես պետք է տպվեն մնացած փաստարկները, այլ նաև նշեն, թե որ տեսակները չեն ազդում տիպի համակարգի վրա, որպեսզի կազմողը չգիտի ձեր տպած օբյեկտի տեսակները: Այս խնդիրը շտկելու համար նոր C և C ++ կազմողները փորձում են մեկնաբանել այս տողը կոմպիլյացիայի ժամանակ: Այս գործառույթի համար սա հատուկ բուժում է: Ոչ մի գործառույթ չպետք է ունենա հատուկ բուժման կարիք: Օգտագործվում են Varargs- ն, որը մաքրում է տեսակը: Այնպես որ, խնդիրը 1-ը բավականին անհրաժեշտ է, եթե այդպես չէ:

Std :: ostream- ի համար, ինչ վերաբերում է std :: cout- ին, << օպերատորը սահմանվում է յուրաքանչյուր տիպի համար, որը ցանկանում եք տպել, և նրանց մեծ մասը կարող է զանգահարել << օպերատորին `իրենց պրիմիտիվ տեսակների համար` այս առաջադրանքը կատարելու համար: Յուրաքանչյուր << օպերատորի գործառույթ գիտի իր արդյունքների տեսակը և կազմման ժամանակ ամբողջովին անվտանգ է: Հետևաբար, անբավարար փաստարկների փոխանցման գործարկման խնդիրը ձևաչափի տողի հիման վրա այլևս խնդիր չէ, քանի որ std :: ostream հրամանը չունի: Չի պահանջում ձևաչափի լար:

Արագության տարբերությունները ամբողջությամբ կախված են կատարումից, բայց std :: cout- ը հնարավորություն է տալիս ավելի արագ լինել, քան printf- ը `մուտքագրման միջոցով:


պատասխանել 3:

Այո, std :: cout- ն ավելի լավ է: Դա std :: ostream- ն է, ինչպես std :: stringstream- ը, որը նման է տպիչի տարբերակին, որը կոչվում է sprintf:

Printf- ի հետ կապված կան մի քանի խնդիրներ:

  1. Այն օգտագործում է ձևաչափի տող ոչ միայն ցույց տալու համար, թե ինչպես պետք է տպվեն մնացած փաստարկները, այլ նաև նշեն, թե որ տեսակները չեն ազդում տիպի համակարգի վրա, որպեսզի կազմողը չգիտի ձեր տպած օբյեկտի տեսակները: Այս խնդիրը շտկելու համար նոր C և C ++ կազմողները փորձում են մեկնաբանել այս տողը կոմպիլյացիայի ժամանակ: Այս գործառույթի համար սա հատուկ բուժում է: Ոչ մի գործառույթ չպետք է ունենա հատուկ բուժման կարիք: Օգտագործվում են Varargs- ն, որը մաքրում է տեսակը: Այնպես որ, խնդիրը 1-ը բավականին անհրաժեշտ է, եթե այդպես չէ:

Std :: ostream- ի համար, ինչ վերաբերում է std :: cout- ին, << օպերատորը սահմանվում է յուրաքանչյուր տիպի համար, որը ցանկանում եք տպել, և նրանց մեծ մասը կարող է զանգահարել << օպերատորին `իրենց պրիմիտիվ տեսակների համար` այս առաջադրանքը կատարելու համար: Յուրաքանչյուր << օպերատորի գործառույթ գիտի իր արդյունքների տեսակը և կազմման ժամանակ ամբողջովին անվտանգ է: Հետևաբար, անբավարար փաստարկների փոխանցման գործարկման խնդիրը ձևաչափի տողի հիման վրա այլևս խնդիր չէ, քանի որ std :: ostream հրամանը չունի: Չի պահանջում ձևաչափի լար:

Արագության տարբերությունները ամբողջությամբ կախված են կատարումից, բայց std :: cout- ը հնարավորություն է տալիս ավելի արագ լինել, քան printf- ը `մուտքագրման միջոցով:


պատասխանել 4:

Այո, std :: cout- ն ավելի լավ է: Դա std :: ostream- ն է, ինչպես std :: stringstream- ը, որը նման է տպիչի տարբերակին, որը կոչվում է sprintf:

Printf- ի հետ կապված կան մի քանի խնդիրներ:

  1. Այն օգտագործում է ձևաչափի տող ոչ միայն ցույց տալու համար, թե ինչպես պետք է տպվեն մնացած փաստարկները, այլ նաև նշեն, թե որ տեսակները չեն ազդում տիպի համակարգի վրա, որպեսզի կազմողը չգիտի ձեր տպած օբյեկտի տեսակները: Այս խնդիրը շտկելու համար նոր C և C ++ կազմողները փորձում են մեկնաբանել այս տողը կոմպիլյացիայի ժամանակ: Այս գործառույթի համար սա հատուկ բուժում է: Ոչ մի գործառույթ չպետք է ունենա հատուկ բուժման կարիք: Օգտագործվում են Varargs- ն, որը մաքրում է տեսակը: Այնպես որ, խնդիրը 1-ը բավականին անհրաժեշտ է, եթե այդպես չէ:

Std :: ostream- ի համար, ինչ վերաբերում է std :: cout- ին, << օպերատորը սահմանվում է յուրաքանչյուր տիպի համար, որը ցանկանում եք տպել, և նրանց մեծ մասը կարող է զանգահարել << օպերատորին `իրենց պրիմիտիվ տեսակների համար` այս առաջադրանքը կատարելու համար: Յուրաքանչյուր << օպերատորի գործառույթ գիտի իր արդյունքների տեսակը և կազմման ժամանակ ամբողջովին անվտանգ է: Հետևաբար, անբավարար փաստարկների փոխանցման գործարկման խնդիրը ձևաչափի տողի հիման վրա այլևս խնդիր չէ, քանի որ std :: ostream հրամանը չունի: Չի պահանջում ձևաչափի լար:

Արագության տարբերությունները ամբողջությամբ կախված են կատարումից, բայց std :: cout- ը հնարավորություն է տալիս ավելի արագ լինել, քան printf- ը `մուտքագրման միջոցով:


պատասխանել 5:

Այո, std :: cout- ն ավելի լավ է: Դա std :: ostream- ն է, ինչպես std :: stringstream- ը, որը նման է տպիչի տարբերակին, որը կոչվում է sprintf:

Printf- ի հետ կապված կան մի քանի խնդիրներ:

  1. Այն օգտագործում է ձևաչափի տող ոչ միայն ցույց տալու համար, թե ինչպես պետք է տպվեն մնացած փաստարկները, այլ նաև նշեն, թե որ տեսակները չեն ազդում տիպի համակարգի վրա, որպեսզի կազմողը չգիտի ձեր տպած օբյեկտի տեսակները: Այս խնդիրը շտկելու համար նոր C և C ++ կազմողները փորձում են մեկնաբանել այս տողը կոմպիլյացիայի ժամանակ: Այս գործառույթի համար սա հատուկ բուժում է: Ոչ մի գործառույթ չպետք է ունենա հատուկ բուժման կարիք: Օգտագործվում են Varargs- ն, որը մաքրում է տեսակը: Այնպես որ, խնդիրը 1-ը բավականին անհրաժեշտ է, եթե այդպես չէ:

Std :: ostream- ի համար, ինչ վերաբերում է std :: cout- ին, << օպերատորը սահմանվում է յուրաքանչյուր տիպի համար, որը ցանկանում եք տպել, և նրանց մեծ մասը կարող է զանգահարել << օպերատորին `իրենց պրիմիտիվ տեսակների համար` այս առաջադրանքը կատարելու համար: Յուրաքանչյուր << օպերատորի գործառույթ գիտի իր արդյունքների տեսակը և կազմման ժամանակ ամբողջովին անվտանգ է: Հետևաբար, անբավարար փաստարկների փոխանցման գործարկման խնդիրը ձևաչափի տողի հիման վրա այլևս խնդիր չէ, քանի որ std :: ostream հրամանը չունի: Չի պահանջում ձևաչափի լար:

Արագության տարբերությունները ամբողջությամբ կախված են կատարումից, բայց std :: cout- ը հնարավորություն է տալիս ավելի արագ լինել, քան printf- ը `մուտքագրման միջոցով: