构造函数调用机制

2023-12-25

struct my
{
   my(){ std::cout<<"Default";}
   my(const my& m){ std::cout<<"Copy";}
   ~my(){ std::cout<<"Destructor";}
};

int main()
{
   my m(); //1
   my n(my()); //2
}

预期输出:

1 ) Default
2 ) Copy

实际输出:


我对构造函数调用机制的理解有什么问题吗?

Note为了简洁起见,我省略了头文件。


Case 1)

m被解释为函数返回my并且不接受任何争论。 要查看预期的输出,请删除()即使用my m;

Case 2)

这就是众所周知的“最令人烦恼的解析”。

n被解释为函数返回my它接受一个指向函数返回的指针类型的参数my不接受任何争论。

要查看这种情况下的预期输出,请尝试my n((my()));[编译器不再像前一种情况那样将其视为参数规范,而是将其解释为表达式,因为额外的()]

我的解读:

my n((my()))相当于my n = my()。现在是右值表达式my()创建一个临时的[即对默认构造函数的调用]并且n复制是否初始化为该临时对象[由于某些原因,没有调用复制向量编译器优化 https://stackoverflow.com/questions/4286301/why-isnt-the-copy-constructor-called-here/4286330#4286330]

P.S:我对我的答案的最后部分不是100%确定。如果我错了请纠正我。

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

构造函数调用机制 的相关文章

随机推荐

  • 如何在laravel中使用RouteServiceProvider添加多个路由文件

    我想创建模块明智的路由文件并使用 RouteServiceProvider mapApiRoutes 加载所有路由文件 我创建了category php 文件和admin php 文件 其中包含路由 现在我想在 api php 文件中加载这
  • Python 3.4 url​​lib.request错误(http 403)

    我正在尝试打开并解析 html 页面 在 python 2 7 8 中我没有问题 import urllib url https ipdb at ip 66 196 116 112 html urllib urlopen url read
  • 通过 SSH 在 Xcode 6 下运行 xcodebuild 测试时超时

    我似乎在将 Xcode6 与 jenkins 集成时遇到问题 我目前有此设置并使用 Xcode 5 通过 SSH 远程运行 xcode 6 模拟器超时 当我在本地运行时 它成功 Command xcodebuild workspace PR
  • typeof() 检查数值

    检查 typeof 在数学上是否可用 数字 的最简单方法是什么 我需要使用尝试解析方法 https stackoverflow com questions 1730838 c sharp check value stored inside
  • 快速将内存中的数据库转储到文件

    我想利用将 SQLite 数据库 通过 SQLAlchemy 保存在内存中的速度优势 同时执行插入内容的一次性过程 然后将其转储到文件 存储起来供以后使用 考虑一个沼泽标准数据库以通常的方式创建 http docs sqlalchemy o
  • 每 n 分钟新线程 (java.lang.Thread.State: WAITING at sun.misc.Unsafe.park(Native Method))

    我阅读了所有现有主题 但没有找到任何解决我的问题的方法 我使用 VisualVM 监控 glassfish 服务器 并注意到一些奇怪的行为 这是屏幕截图 java lang Thread State WAITING at sun misc
  • Node.js (sudo) 和 monit

    我创建了一个新贵脚本来守护主宰 一个node js应用程序 新贵脚本如下 description juggernaut server author panojsee start on startup stop on shutdown scr
  • Python 3.x GUI 教程 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Codeigniter - 在视图中使用会话数据

    我有一个用户的名字和姓氏存储在会话数据中 我想在视图中回显它 以便他们可以看到他们登录的身份 我似乎无法让数据通过 我确信这很简单 但我对 CI 和整个 MVC 还很陌生 控制器代码 public function index if thi
  • 如何将视频嵌入到 GitHub README.md 中?

    是否可以将 Flash 视频嵌入到 GitHub 上的 README md 中 它没有出现 https github com mattdipasquale PicSciP https github com mattdipasquale Pi
  • Oracle 数据访问 FileNotFound:Oracle.DataAccess.Common.Configuration.Section.xsd

    昨天 2016 年 5 月 11 日 我在 NET 4 6 上的 C 代码很高兴使用来自 nuget 的 Oracle ManagedDataAccess 驱动程序版本 12 1 24160419 从 Oracle 读取数据 今天 该死的事
  • Pytest:删除由测试函数创建的文件

    我正在测试一个函数 作为其执行的一部分 它会腌制对象 测试后 我想删除pickle文件 如果是测试本身保存文件 pytest的 tmpdir 装置似乎是解决方案 然而 由于正在测试的函数是保存文件的创建者 而不是测试 我不确定测试后清理文件
  • 我的 Deforum Stable Diffusion Notebook 中的步骤 4 不断出现 FileNotFound 错误

    我承认我对很多事情都是新手 我已经很多年没有从事过如此深入的工作了 我希望我是在正确的地方发布这篇文章 如果我做得不正确 我深表歉意 请让我知道我是否应该采取不同的做法 我已经使用稳定扩散来创建动画几个月了 昨天它突然停止工作了 突然 我在
  • 在 O(n log n) 时间内找到特殊点 k 的算法

    给出算法的 n log n 次下界 以检查一组点是否具有特殊点 k k 定义为 对于一组点 A 如果对于 A 中的每个点 m A 中存在一个点 q 使得 k 位于线段 mq 的中间 这样 k 不必属于 A 例如 对于四个点 1 0 0 1
  • 在 Lync 中检测来电

    我正在尝试在 Lync 客户端中检测来电 这是通过在 Lync 客户端中订阅 ConversationManager ConversationAdded 事件来完成的 如中所述这个帖子 https stackoverflow com que
  • SOA:为什么不使用 Erlang/OTP Web 服务器作为服务?

    读完后面向服务的架构原则 http soaprinciples com 网站和相应的维基百科article http en wikipedia org wiki Service oriented architecture我有一个想法 Erl
  • 使用 Rmd 的 knitr 分辨率较差

    我有一个 Rmd 文件 我正在尝试通过函数 pandoc 创建一个 docx 文件 我想要一个最终分辨率为 504x504 像素的图形 即 7x7 英寸 72dpi 不幸的是 默认的 72 dpi 质量太差 我想将其增加到 150 dpi
  • C# 中的 My.Computer 相当于什么 [重复]

    这个问题在这里已经有答案了 可能的重复 VB NET 到 C my computer getfiles https stackoverflow com questions 1909348 vb net to c sharp my compu
  • 猫头鹰旋转木马 100% 高度

    我对猫头鹰旋转木马 2 有一个小问题 这是我网站的旧版本 http lukaszradwan com pl http lukaszradwan com pl 请看一下主滑块 这不是猫头鹰旋转木马 我不知道它是什么 但它工作正常 高度设置为
  • 构造函数调用机制

    struct my my std cout lt lt Default my const my m std cout lt lt Copy my std cout lt lt Destructor int main my m 1 my n