显然在某些情况下,在 C++scanf()
中优于 . cin
,我想知道是否有任何情况printf()
比cout
.
问问题
1760 次
2 回答
4
简短的回答:总是!!!在 c++ 中,总是使用 cout 而不是 printf 是有意义的,因为与 printf 不同,它为您提供类型安全。
于 2013-02-07T17:34:04.150 回答
3
您可以使用ostream
interface (so cout
) 做的事情远远优于 old style printf()
。首先,它是类型安全的,因此当您错误地使用错误的格式序列时,您不会遇到任何分段违规。
一个例子。想象一下,您必须打印出struct stat
Posixfstat
函数返回的属性。属性的类型是使用系统相关的 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
理解的格式化序列集。相反,您可以轻松地重载<<
运算符以方便地打印您自己类型的对象。
于 2013-02-07T17:35:45.450 回答