在C++中使用printf()比使用cout有什么主要优势吗



很明显,在C++中,scanf()cin更可取,我想知道是否有printf()cout更实用的情况。

简短回答:永远!!!在c++中,总是在printf上使用cout是有意义的,因为它提供了与printf不同的类型安全性。

使用ostream接口(因此cout)所能做的远远优于旧式printf()。首先,它是类型安全,因此当您错误地使用错误的格式序列时,不会出现任何分段冲突。

一个例子。假设您必须打印出Posix fstat函数返回的struct stat的属性。属性的类型是使用系统相关的typedefs:定义的

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<lt;"dev_t="<lt;s.st_dev;

C++流的另一个重要优势是可扩展性。不可能扩展printf所理解的格式化序列的集合。相反,您可以轻松地重载<<操作符,以方便地打印您自己类型的对象。

相关内容

  • 没有找到相关文章

最新更新