我应该如何将对象传递给函数?

2024-03-06

我是 C++ 编程新手,但我有 Java 编程经验。我需要有关如何在 C++ 中将对象传递给函数的指导。

我是否需要传递指针、引用或非指针和非引用值?我记得在 Java 中不存在这样的问题,因为我们只传递保存对象引用的变量。

如果您还可以解释在哪里使用这些选项,那就太好了。


经验法则C++11:

Pass by value,除非当

  1. 你不需要对象的所有权,一个简单的别名就可以了,在这种情况下你pass by const参考,
  2. 你必须改变对象,在这种情况下,使用经过一个非const左值参考,
  3. 您将派生类的对象作为基类传递,在这种情况下您需要通过引用传递。 (利用前面的规则来判断是否通过const参考与否。)

实际上从不建议通过指针传递。可选参数最好表示为std::optional (boost::optional对于较旧的标准库),并且通过引用可以很好地完成别名。

C++11 的移动语义使得按值传递和返回更具吸引力,即使对于复杂对象也是如此。


经验法则C++03:

传递参数by const参考,除非当

  1. 它们将在函数内部进行更改,并且此类更改应反映在外部,在这种情况下,您经过非const参考
  2. 该函数应该可以在没有任何参数的情况下调用,在这种情况下,您可以通过指针传递,以便用户可以传递NULL/0/nullptr反而;应用之前的规则来确定是否应该传递一个指向 a 的指针const争论
  3. 它们是内置类型,可以是通过副本
  4. 它们将在函数内部进行更改,并且此类更改应该not被反射到外面,在这种情况下你可以通过副本(另一种方法是根据前面的规则传递并在函数内部进行复制)

(这里,“按值传递”被称为“按副本传递”,因为按值传递在C++03中总是创建一个副本)


还有更多内容,但是这几条初学者规则将使您走得更远。

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

我应该如何将对象传递给函数? 的相关文章

  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 是否有与 C++11 emplace/emplace_back 函数类似的 C# 函数?

    从 C 11 开始 可以写类似的东西 include
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • 无法使用 Ninject 将依赖项注入到从 Angular 服务调用的 ASP.NET Web API 控制器中

    我将 Ninject 与 ASP NET MVC 4 一起使用 我正在使用存储库 并希望进行构造函数注入以将存储库传递给其中一个控制器 这是实现 StatTracker 接口的上下文对象 EntityFramework public cla
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它

随机推荐

  • Cython setup.py 找不到已安装的 Visual C++ 构建工具

    我正在尝试使用此 setup py 文件构建我的 cython 代码 from distutils core import setup from Cython Build import cythonize import numpy as n
  • C# Linq 在嵌套数组对象中查找特定项

    我正在使用 asp net core webapi 和 azure cosmosdb 开发一个应用程序 我需要从对象列表中找到一个项目 我对 linq 没有经验 在下面的 json 中 我需要找到一个拥有 learnerId 123 的扇区
  • php xpath 与 text() 和 SimpleXMLElement->xpath 不符合 xpath 预期结果

    我正在尝试获取 td span 的所有文本节点 我正在尝试使用 xpath td span text 问题是它返回每个文本元素的所有文本节点 这里有两个 193 和 120 它返回 193120 两次 而不是单独元素中的 193 和 120
  • 获取 numpy 稀疏矩阵行的范数

    我有一个通过使用 Sklearn 的 TfidfVectorizer 对象获得的稀疏矩阵 vect TfidfVectorizer sublinear tf True max df 0 5 analyzer word vocabulary
  • 如何有效地编码/解码压缩的位置描述?

    我正在为日本象棋变体编写一个表库 为了索引表基数 我将每个国际象棋位置编码为整数 在编码步骤之一中 我对棋盘上棋子的位置进行编码 由于实际方法有点复杂 我就简单地解释一下这个问题 编码 在残局桌面中 我有 比方说 六个不同的棋子 我想将它们
  • 可空类型装箱/拆箱 - 为什么要这样实现?

    通过 C 从 CLR 中提取有关装箱 拆箱值类型的信息 关于装箱 如果可空实例不是null CLR 从可为 null 的实例中取出值并将其装箱 换句话说可空 值为5被装箱成盒装 Int32值为 5 关于拆箱 拆箱只是获取对装箱对象的拆箱部分
  • 关闭 Matplotlib 数据[重复]

    这个问题在这里已经有答案了 我正在使用 Matplotlib 和 MPLD3 创建可以在 html 页面中显示的图形 使用 django 目前 我的图表是根据从 csv 文件中提取的数据动态生成的 我经常在终端中收到此消息 运行时警告 已打
  • Android 唯一序列号

    我正在开发一个针对 Android 4 0 API 14 及更高版本的 Android 应用程序 我正在寻找每个设备唯一且永久存在的序列号 随设备一起死亡 恢复出厂设置后不会更改 我在网上找到了很多关于 Android 设备唯一标识符的结果
  • 使用 AppCompat 的 SearchView

    我在使用appcompat v7之前在Actionbar中实现了SearchView 但是当我想将 SearchView 与支持库 v7 一起使用时 它显示 null 异常 In style
  • 在C中编写位图文件头时出现问题

    我正在尝试使用 C 创建一个新的位图文件 这是 bmp 文件头的结构 define uint16 unsigned short define uint32 unsigned long define uint8 unsigned char t
  • 无法在 osx 优胜美地上制作枪图。未定义的符号

    我尝试在 os x yosemite 10 10 4 下制作 gnuplot 5 0 0 但出现错误 make Applications Xcode app Contents Developer usr bin make all recur
  • 了解 Cocoa 和 Objective-C 的引用计数

    我刚刚开始了解 Objective C 和 Cocoa 希望能够使用 iPhone SDK 我对 C 相当满意malloc and free概念 但 Cocoa 的引用计数方案让我相当困惑 有人告诉我 一旦你理解了它 它就会非常优雅 但我只
  • Rails:调用 .limit(5) 更改结果顺序

    我有一个搜索功能 基本上运行模型记录的有序列表 问题是每当我打电话时 search limit 5 结果的顺序与我调用时的顺序不同 search 这是我的一些方法 def self search server name pvp type i
  • 错误:您正在传递未定义的模块!请检查您传递给 i18next.use() 的对象

    由于上述问题 我的单元测试失败了 String ts import as i18n from i18next import initReactI18next from react i18next import BrowserLanguage
  • OSStatus NSOSStatusErrorDomain

    当我使用获取该属性时收到以下错误 AudioSessionGetProperty kAudioSessionProperty CurrentHardwareSampleRate size myAudioDescription mSample
  • 解析 1 TB 文本并有效计算每个单词出现的次数

    最近 我遇到一个面试问题 用任何语言创建一个算法 该算法应该执行以下操作 读取 1 TB 内容 对该内容中每个重复出现的单词进行计数 列出最常出现的 10 个单词 您能让我知道为此创建算法的最佳方法吗 Edit 好吧 假设内容是英文的 我们
  • 通过将一个变量拆分为多个变量来创建新列(在 R 中)

    我想通过分割数据框中的向量来创建新列 我有这样一个数据框 YEAR Variable1 Variable2 2009 000000 00000001 2010 000000 00000001 2011 000000 00000001 200
  • 在单例中使用删除的复制构造函数

    我已经实现了单例模式 例如this https stackoverflow com questions 270947 can any one provide me a sample of singleton in c 271104 2711
  • 在Golang中指定http请求的网络接口[重复]

    这个问题在这里已经有答案了 我使用 go 的 http 包来发出 http 请求 当 Ubuntu Linux 上有多个接口时 如何配置 go 的 http 客户端使用特定接口或 IP 地址来执行请求 默认的http客户端如何决定它使用哪个
  • 我应该如何将对象传递给函数?

    我是 C 编程新手 但我有 Java 编程经验 我需要有关如何在 C 中将对象传递给函数的指导 我是否需要传递指针 引用或非指针和非引用值 我记得在 Java 中不存在这样的问题 因为我们只传递保存对象引用的变量 如果您还可以解释在哪里使用