专栏首页C++核心准则原文翻译C++核心准则​SL.io.3:优先使用iostream进行I / O

C++核心准则​SL.io.3:优先使用iostream进行I / O

SL.io.3: Prefer iostreams for I/O

SL.io.3:优先使用iostream进行I / O

Reason(原因)

iostreams are safe, flexible, and extensible.

iostream安全,灵活且可扩展。

Example(示例)

// write a complex number:
complex<double> z{ 3, 4 };
cout << z << '\n';

complex is a user-defined type and its I/O is defined without modifying the iostream library.

complex是用户定义的类型,无需修改iostream库即可定义其I / O。

Example(示例)

// read a file of complex numbers:
for (complex<double> z; cin >> z; )
    v.push_back(z);
Exception(例外)

??? performance ???

??? 性能???

Discussion: iostreams vs. the printf() family

讨论:iostreams与printf()函数群

It is often (and often correctly) pointed out that the printf() family has two advantages compared to iostreams: flexibility of formatting and performance. This has to be weighed against iostreams advantages of extensibility to handle user-defined types, resilient against security violations, implicit memory management, and locale handling.

人们经常(经常正确地)指出,与iostream相比,printf()函数群具有两个优点:格式化的灵活性和性能。必须权衡iostream的优势:处理用户定义的类型时的可扩展性,可抵御安全性违规,隐式内存管理和区域设置处理。

If you need I/O performance, you can almost always do better than printf().

如果需要保证I / O性能,iostream几乎可以总是比printf()更好。

gets(), scanf() using %s, and printf() using %s are security hazards (vulnerable to buffer overflow and generally error-prone). C11 defines some "optional extensions" that do extra checking of their arguments. If present in your C library, gets_s(), scanf_s(), and printf_s() might be safer alternatives, but they are still not type safe.

使用%s的gets(),scanf()和使用%s的printf()都有安全隐患(很容易造成缓冲区溢出并且通常容易出错)。C11定义了一些“可选扩展”,对它们的参数进行了额外的检查。如果是在使用C语言库,gets_s(),scanf_s()和printf_s()可能是更安全的选项,但它们仍然不是类型安全的。

Enforcement(实施建议)

Optionally flag <cstdio> and <stdio.h>.

(可选)标记<cstdio>和<stdio.h>。

原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#slio3-prefer-iostreams-for-io

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则C.37:保证析构函数不会抛出异常

    所有的析构函数都可以不失败。如果析构函数试图抛出异常退出,这是严重的设计错误,更好的选择是中止程序。

    面向对象思考
  • C++核心准则C.35:基类的析构函数要么是公开的虚函数,要么是保护的非虚函数

    C.35: A base class destructor should be either public and virtual, or protected ...

    面向对象思考
  • C++核心准则C.11:让具体类型符合常规

    Regular types are easier to understand and reason about than types that are not ...

    面向对象思考
  • springcloud gateway 自定义协议转化实现

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    张泽旭
  • IOS 更简洁的动画设置方式

    用户5760343
  • 微信小程序自定义登录

    每次在输入框输入时,都会去触发该方法,并且带有参数,该参数(event)的 event.detail.value 值正是我们输入的最新内容,同时 event.c...

    乐心湖
  • 微信小程序零基础入门--->wxss样式

    WXSS (WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式。

    用户5899361
  • 微信小程序自定义登录

    每次在输入框输入时,都会去触发该方法,并且带有参数,该参数(event)的 event.detail.value 值正是我们输入的最新内容,同时 event.c...

    乐心湖
  • 《Springboot极简教程》问题解决:Springboot启动报错 Whitelabel Error Page: This application has no explicit mapping

    首先,这个出错页面是SpringBoot的一个默认出错页面。源码在:org.springframework.boot.autoconfigure.web.ser...

    一个会写诗的程序员
  • Python进行特征提取

    陆勤_数据人网

扫码关注云+社区

领取腾讯云代金券