”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > C++ 中何时通过引用或指针传递:指导原则?

C++ 中何时通过引用或指针传递:指导原则?

发布于2024-11-15
浏览:952

When to Pass by Reference or Pointer in C  : A Guiding Principle?

C 中通过引用或指针传递:指导原则

在 C 中,了解何时采用引用传递以及何时使用指针至关重要。这种做法可以产生高效且无错误的代码。

一般情况

  • 将 std::string 传递给函数:

    • foo(std::string*) 或 foo(std::string&)?
  • 将 tr1::shared_ptr 传递给函数:

    • foo(tr1::shared_ptr* ptr) 或 foo(tr1::shared_ptr& ptr)?

指针与引用

通过引用传递提供了一致性,因为每个对象都可以被视为引用。然而,通过指针传递提供了处理空指针和文字的灵活性。

片段分析

给定的片段:

map> > adjacencyMap;
vector* myFriends = new vector();
myFriends->push_back(string("a"));
myFriends->push_back(string("v"));
myFriends->push_back(string("g"));
adjacencyMap["s"] = shared_ptr >(myFriends);

强调需要考虑引用和指针的属性:

  • 地图键使用引用,保证内存效率。
  • 向量指针允许动态分配,方便向量相加。

经验法则

最终,适当的选择取决于具体要求。作为指导原则,请考虑:

  • 使用引用:为了高效内存使用以及保证对引用对象的访问。
  • 使用指针: 处理 nullptr、使用动态内存或需要修改引用本身时。
最新教程 更多>
  • 为什么我的PHP提交按钮没有触发回显和表格显示?
    为什么我的PHP提交按钮没有触发回显和表格显示?
    PHP 提交按钮困境:不可用的回显和表格您的代码打算在单击“提交”按钮时显示回显和表格在 PHP 表单上。但是,您遇到了这些元素仍然隐藏的问题。这是因为您使用 if(isset($_POST['submit'])) 来控制这些元素的显示,但提交按钮缺少 name 属性。解决方案:提供...
    编程 发布于2024-11-15
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-15
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-15
  • 为什么我的 @font-face EOT 字体无法在 Internet Explorer 中通过 HTTPS 加载?
    为什么我的 @font-face EOT 字体无法在 Internet Explorer 中通过 HTTPS 加载?
    @font-face EOT 无法通过 HTTPS 加载:解决方案遇到 @font-face EOT 文件在 Internet 中无法通过 HTTPS 加载的问题在 Explorer 版本 7、8 和 9 中,用户发现无论 HTTPS 上包含的 HTML 页面的托管状态如何,问题仍然存在。经过实验,...
    编程 发布于2024-11-15
  • 为什么通过 Makefile 运行 Go 程序时出现“权限被拒绝”错误?
    为什么通过 Makefile 运行 Go 程序时出现“权限被拒绝”错误?
    权限被拒绝:调查“go run”和 Makefile 调用之间的差异通过 Makefile 运行 Go 程序时遇到权限被拒绝错误可能会令人困惑。此问题源于 GNU make 或其 gnulib 组件中的错误。根本原因在于系统 PATH 中存在一个名为“go”的目录,该目录位于实际 Go 可执行文件所...
    编程 发布于2024-11-15
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-15
  • 可以使用 CSS 设计 SVG 背景图像吗?
    可以使用 CSS 设计 SVG 背景图像吗?
    您可以使用 CSS 设计 SVG 背景图像吗?作为 SVG 爱好者,您精通将 SVG 用作背景图像。然而,仍然存在一个持续存在的问题:您是否也可以在同一个文件中使用 CSS 设计 SVG 样式?遗憾的是,答案是不。用作背景图像的 SVG 被视为与 CSS 样式表隔离的单个实体。 CSS 文件中的样式...
    编程 发布于2024-11-15
  • 能否结合使用 LIKE 和 IN 来实现更强大的 SQL 查询?
    能否结合使用 LIKE 和 IN 来实现更强大的 SQL 查询?
    结合LIKE和IN进行高级SQL查询在SQL中,LIKE运算符经常用于模式匹配,而IN运算符允许我们将一个值与一系列特定值进行匹配。虽然这些运算符有不同的用途,但可以将它们组合起来创建更强大的查询。让我们考虑以下场景:您有一个表,其中有一列名为“company_id”,并且您想要选择其中包含该列的所...
    编程 发布于2024-11-15
  • 为什么PHP中逗号可以用于回显但不能用于返回?
    为什么PHP中逗号可以用于回显但不能用于返回?
    为什么用逗号回显有效,而用逗号返回却不起作用?在 PHP 中使用 echo 和 return 连接值时,有使用句号和逗号之间的细微差别。具体来说:Echo:允许以逗号分隔的多个表达式回显到输出。返回:只能返回一个单个表达式。使用句点句点 (.) 运算符将字符串或其他数据类型连接成单个字符串。例如:e...
    编程 发布于2024-11-15
  • 如何将 Django 数据库从 SQLite 迁移到 MySQL:分步指南
    如何将 Django 数据库从 SQLite 迁移到 MySQL:分步指南
    将 Django DB 从 SQLite 迁移到 MySQL将数据库从 SQLite 迁移到 MySQL 可能是一项艰巨的任务。由于可用的工具和脚本过多,因此很难确定最可靠和最直接的方法。一位经验丰富的 Django 开发人员建议了一个经受时间考验的解决方案。他们建议执行以下步骤:转储现有的 SQL...
    编程 发布于2024-11-15
  • 如何确保 JavaScript 中准确的整数验证:哪种方法最好?
    如何确保 JavaScript 中准确的整数验证:哪种方法最好?
    如何在 JavaScript 中验证整数输入无论是需要检查整数以确保数据一致性,还是需要向用户提示准确的错误消息,JavaScript 提供了多种验证方法整数输入。一种常见的方法是使用 parseInt() 函数。但是,如果您想要处理可能被解析为整数的字符串等场景,仅此方法可能不够。稳健的整数验证函...
    编程 发布于2024-11-15
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-15
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-15
  • 如何从现有模型自动生成 Sequelize 迁移?
    如何从现有模型自动生成 Sequelize 迁移?
    使用 Sequelize CLI 自动生成迁移为 Sequelize 模型创建迁移是数据库管理中的关键步骤。迁移使您能够跟踪数据库架构随时间的变化。虽然 Sequelize 提供了用于模型生成的 CLI 工具,但它还提供了从现有模型自动生成迁移的功能。要自动生成迁移,请按照以下步骤操作:安装 Seq...
    编程 发布于2024-11-15
  • 如何计算MySQL中两个日期之间的准确年龄差?
    如何计算MySQL中两个日期之间的准确年龄差?
    在 MySQL 中获取两个日期之间的年龄差在 MySQL 中,计算两个日期之间的年龄差可能具有挑战性,尤其是如果你想要它作为一个整数。通常,使用 DATEDIFF() 或除以 365 会导致浮点值或年份可能不准确。一种有效的方法是使用 TIMESTAMPDIFF() 和适当的日期单位:SELECT ...
    编程 发布于2024-11-15

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3