很明显,在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