Google 关于输入/输出参数作为指针的样式指南

2024-03-30

The 谷歌 C++ 风格指南 http://google-styleguide.googlecode.com/svn/trunk/cppguide.html做出了明确的区分(严格遵循cplint.py http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py) 输入参数(→ const ref, value)和输入输出或输出参数(→ 非 const 指针)之间:

C/C++ 函数的参数可以是函数的输入、输出 从功能,或两者兼而有之。输入参数通常是值或 const 引用,而输出和输入/输出参数将是 非常量指针。

并进一步 :

事实上,Google 代码中的一个非常严格的约定是,输入参数是值或 const 引用,而输出参数是指针。

但我无法弄清楚为什么输入/输出参数(我将输出参数放在一边)不应通过引用传递。在 stackoverflow 上有很多与这个问题相关的主题:例如here https://stackoverflow.com/questions/3967177/when-to-use-const-and-const-reference-in-function-args,接受的答案清楚地表明

主要是关于风格

但如果

如果你希望能够传递 null,则必须使用指针

那么,有什么意义呢always如果我想避免指针为空,需要一个指针吗?为什么只使用输入参数的引用?


要求输出参数作为指针传递的原因很简单:

它清楚地表明在呼叫站点该论点可能会发生变化:

foo(x, y);     // x and y won't be mutated
bar(x, &y);    // y may be mutated

当代码库不断发展并经历增量更改(而这些更改由可能并不总是了解整个上下文的人员进行审查)时,能够尽快了解更改的上下文和影响非常重要。因此,有了这个样式规则,就可以立即清楚更改是否会引入突变。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google 关于输入/输出参数作为指针的样式指南 的相关文章

随机推荐

  • Solr“实时”索引

    我知道有几个与此类似的问题 但它们没有为当前的问题提供简单的答案 抱歉 如果您觉得这是重复的 但我认为清晰易懂的答案将使很多人受益 那么 对于这个问题 Solr 索引更新可以自动化吗 如果可以的话 最佳方法是什么 这是一个简单的用例来澄清问
  • 使用 Powershell 将 PDF 打印为 XPS

    我想使用 Powershell 将包含 PDF 文件的文件夹转换为 XPS 文件 由于系统限制 我无法下载任何第三方软件 例如 iTextSharp 来完成此工作 我已经能够让Powershell打开文档并打开XPS的打印窗口 但名称始终为
  • 使用 javax.sound.midi 包设置乐器通道

    我在 javax sound midi 包中设置乐器时遇到问题 Synthesizer synthesizer MidiSystem getSynthesizer MidiChannel channels synthesizer getCh
  • Python setup.py 在 Egg 中包含 .json 文件

    我想将 json 文件也打包到 python Egg 文件中 例如 boto包有endpoints json文件 但是当我运行 python setup py bdist egg 时 它不包含 Egg 中的 json 文件 如何将Json文
  • greenhills 编译器关闭文件或部分文件的优化

    我发现了几个用于禁用专用代码部分的 GCC 优化的代码片段 使用编译指示 GCC 优化 0 但我找不到 Greenhils 编译器的类似内容 没有这样的选择吗 从手册 pragma ghs Ostring Turns on optimiza
  • Powershell 命令修剪以“\”结尾的路径

    如果路径结尾为 我需要修剪路径 C Ravi 我需要更改为 C Ravi 我有一个情况 路径不会以 那么它必须跳过 我尝试过 EndsWith 但是当我有时它会失败 代替 可以在 PowerShell 中完成此操作而不诉诸条件吗 考虑使用T
  • 检索 Win64 异常表中的所有条目

    从一些更清晰的理解Win64异常堆栈行走不显示条目 https stackoverflow com questions 14187450 win64 exception stack walking not displaying entrie
  • 需要字母和数字 - regEx

    我试图弄清楚如何只需要字母和数字而不需要任何其他字符 所以从字面上看 a z and d or 0 9 取决于对数字执行此操作的更好方法 因此 如果我有一个需要验证的字符串 toValidate Q23AS9D0APQQ2 It may s
  • 为什么泛型类型不能有显式布局?

    如果尝试使用以下方法创建一个通用结构 StructLayout http msdn microsoft com en us library system runtime interopservices structlayoutattribu
  • 类型参数不可分配给字符串

    我有一个格式化的 json 数据 我想在 d3 中使用它来绘制层次结构 它正在处理旧数据 但在 json 数据中添加更多维度后 出现以下错误 类型参数 name string 孩子们 组 数量 名称 字符串 组 数量 不可分配给 只读字符串
  • 安卓LVL合理吗?

    我即将发布我的第一个 Android 应用程序 我正在考虑为我的应用程序使用 Android 的许可服务 LVL 但现在我不确定不使用任何许可服务是否会更好 a LVL 无论如何都可以被破解 b LVL 导致我的应用程序出现一些延迟 你们有
  • 缩放后确定 HTML5 画布上的鼠标位置

    我正在开发一些 HTML5 中涉及画布使用的软件 我需要在一张画布上进行缩放并允许用户通过单击鼠标在画布上进行涂鸦 到目前为止 在我找到的一些示例的帮助下 我已经可以使用缩放功能了 问题是缩放后 我的绘图工具上的鼠标位置不正常 在进行任何缩
  • 绘制线而不是点 R

    这可能是一个简单的问题 但我无法找到解决方案 我有以下图 我正在使用图 CI 因为我无法用图 填充点 leg lt c 1 2 3 4 5 6 7 8 Col rar1 lt c rgb 1 0 0 0 7 rgb 0 0 1 0 7 rg
  • PyQt self.close() 在 __init__() 中

    我在 Python 2 7 下使用 PyQt4 时遇到了一些小问题 我正在编写一个小项目 其中有一些 QDialogs 相互打开 因此 我打开一个对话框 然后立即打开另一个对话框来检查某些内容 当出现错误检查时 我希望关闭整个对话框 它看起
  • 您可以设置整数的最大限制(C++)吗?

    如果我不想让一个整数超过 100 是否有任何简单的方法可以确保该整数永远不会超过 100 无论用户添加了多少 例如 50 40 90 50 50 100 50 60 100 50 90 100 尝试这个 std min 50 40 100
  • 从 JSON 创建多表头表

    我是熊猫新手 我正在尝试创建下表 C Perl line func line func version covered total covered total 我创建的 JSON 结构如下 version1 perl line covere
  • 使用 Google AppEngine MapReduce 处理所有记录后,如何从计数器获取值?

    使用 Google AppEngine MapReduce 处理所有记录后 如何从计数器获取值 或者我在这里错过了计数器的用例 示例代码来自http code google com p appengine mapreduce wiki Us
  • 如何从 browserify/babelify 导出全局变量以便在没有 browserify 的项目中使用?

    设想 我有两个设置完全不同的项目 常规网站 遗留代码和简单的 gulp 设置 小宠物项目 在 ES6 类的帮助下编写的 JS 滑块插件 用 babel 转译 JS 吞咽任务 gulp task js function return gulp
  • Apache Hive regEx serde:数据类型

    对于处理日志 我想使用 Apache Hive regEx serde 但我只找到使用 String 作为表列的数据类型的示例 现在我的问题是 是否支持基于日期的类型 整数和数组 还是只是字符串 此示例 和其他示例 仅使用字符串 CREAT
  • Google 关于输入/输出参数作为指针的样式指南

    The 谷歌 C 风格指南 http google styleguide googlecode com svn trunk cppguide html做出了明确的区分 严格遵循cplint py http google styleguide