很明顯,在C++ scanf()
優於cin
的情況下,我想知道是否有任何情況printf()
比cout
更實用。在C++中使用printf()比cout有什麼主要優點?
回答
你可以用ostream
接口做什麼(所以cout
)遠遠優於舊式printf()
。首先,它是類型安全,所以當您錯誤地使用錯誤的格式序列時,您不會得到任何分段違規。
一個例子。想象一下你必須打印出由Posix fstat
函數返回的struct stat
的屬性。使用與系統相關的typedef來定義屬性的類型:
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* total size, in bytes */
/* ... more attributes */
};
因此,像dev_t
這樣的東西在不同的系統上是不同的類型(typedef)。你可能會發現你的特定系統dev_t
上等同於,比如說,int
,並寫:
printf("dev_t=%d", s.st_dev);
,它會工作在系統上,但是當你編譯另一個系統,它定義上,例如,dev_t
不是int
但是,比如說long
,那麼你的代碼將會被編譯,但是會在運行時崩潰。
如果使用C++流和重載<<
然後操作員的東西總是會正常工作:
COUT < < 「的dev_t =」 < < s.st_dev;
C++流的另一個重要優勢是可擴展性。不可能擴展printf
理解的格式化序列集合。相反,您可以輕鬆地將<<
運算符超載,以方便地打印您自己類型的對象。
簡答:總是!!! 在C++中總是在printf上使用cout是有意義的,因爲它爲您提供了類似printf的安全性。
毫無疑問,有與cout相關的優點,但事實上,cout不是線程安全的,使得printf在某些方面更優越:),尤其是在調試時,如果你是多線程環境,避免cout等等。 – Saqlain
- 1. 在計劃中使用承諾有什麼主要優勢?
- 2. Tuple的主要優點是什麼?
- 3. C++的cout像C的printf
- 4. 爲什麼不在C++中使用printf()
- 5. 在使用OpenGL時,C++比C#有什麼優勢?
- 6. cout << cout和cout <<&cout在C++中有什麼區別?
- 7. rspec比test :: unit有什麼主要優勢?
- 8. 使用推力與printf/cout
- 9. 使用Maven有什麼優點/缺點?
- 10. printf中%c和%C有什麼區別?
- 11. 使用HttpApplication比HttpApplication有什麼優勢?
- 12. 使用Redux比React有什麼優勢?
- 13. 使用SVN比CVS有什麼優勢?
- 14. 使用javacv比opencv有什麼優勢?
- 15. 使用BaseAdapter比ArrayAdapter有什麼優勢?
- 16. 使用chiliproject比redmine有什麼優勢?
- 17. 使用POCO比DataTables有什麼優勢?
- 18. 在codeigniter中活動記錄的主要優點是什麼?
- 19. 在HTML中,使用div比使用表有什麼優勢?
- 20. 在php中使用變量變量的主要優點是什麼?
- 21. 在Objective C中使用C結構的優點是什麼?
- 22. 如何cout比printf更類型安全()
- 23. 在ruby中,CONST_ID()的用途是什麼,比rb_intern()有什麼優點?
- 24. cout和printf的
- 25. 我爲什麼要使用Angular 2?與Angular 1相比,它有什麼優勢?
- 26. 爲什麼不使用printf和cout的代碼有預期的輸出?
- 27. 使用STI和Category有什麼優點?
- 28. 使用git-svn有什麼優缺點?
- 29. C - 爲什麼在printf()
- 30. NHibernate中版本控制功能的主要優點是什麼?
我不能提供完整的答案,因爲我不記得細節,但在C++標準委員會成員(他爲Facebook工作)的演講中,他提到他更喜歡printf(),因爲cout不會與線程一起工作良好。 –
我很好奇C++'scanf()中的哪些情況比'cin'更好。 –
@DaveRager我發現使用'scanf()'輸入和解釋某些字符串更容易。這裏是我的第一個計算器程序的一行:C:'scanf(「%f%c%f」,&num1,&op,&num2)'。 'op'是一個代表數學運算符(+, - ,*,/)的變量,如果使用得當,可以減少幾十行無用的代碼。 – Jules