为什么在这种情况下没有调用复制构造函数-我的推理正确吗?
Why is the copy constructor not called in this case - Is my reasoning correct?
假设我有一个名为Myobj
的对象,该对象具有所有默认值(复制cstr,移动cstr,赋值和复制赋值)。现在假设有这样一个方法
void fooA(foo& f){..} --->A
然后是另一个方法
void fooB(foo f){..} --->B
现在,当被问到为什么在A的情况下不调用复制构造函数而在B的情况下调用复制构造函数时,我的回答和理解如下。如有错误,请指正
在情况A中没有调用它的原因是foo&
是对foo的引用,而不是foo
因此不会调用foo
的复制构造函数。case A
中的f
只是传递对象的别名。
在情况B中调用它的原因是因为foo
是对象foo而不是对foo的引用。因此调用foo
的复制构造函数。拷贝目录为foo::foo(const foo& f)
。因此在语句
fooB(someobject);
在函数上相当于
void fooB(foo f){..} gives fooB f (someobject); //Cpy constr is called
请让我知道我的答案和理解是否正确
是的,但在我看来你的措辞很奇怪,或者你可能把事情弄得太复杂了。
第二个签名使用"按值传递"方法。与第一个示例相反,在第一个示例中使用了"通过引用传递"。其思想是操作实参的值,而不是实参本身。
这意味着对传递的形参进行临时复制,其生存期受函数作用域的限制。
是的。我认为你的意思是在第一种情况下,它是对f
的参考,而不是对foo
的参考。同样,在第二种情况下,你是传递一个副本给f
,而不是f
本身。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为什么我的 std::ref 无法按预期工作?
- 当我尝试在启用推理引擎的情况下编译 OpenCv 时,出现错误
- 为什么在这种情况下没有调用复制构造函数-我的推理正确吗?