【发布时间】:2016-02-15 12:20:19
【问题描述】:
例如我有一行代码:
已编辑:
MyClass myObject = MyClass(5);
这里会调用MyClass的构造函数MyClass()。它接受参数并执行假定的操作.. 但我这个例子 myObject 不是参考 - 它是一个实际的对象。那么编译器如何做到这一点: 通过 MyClass 构造函数构造一个对象,它不知道实际对象的位置 (所说的位置是指堆栈上 RAM 中的地址)。 同样的问题也适用于其他示例(myObject = new MyClass(5);、myobject(5) 等)
编辑
1) 为什么MyClass myObject = MyClass(i);
这实际上相当于:MyClass myObject(i);
2)在这种情况下“=”是运算符=(重载)吗?
3) 您能否为编译器生成的操作编写等效代码?
4) 复制构造函数在这里扮演什么角色 (MyClass myObject = MyClass(i);)?
【问题讨论】:
-
这个代码是非法的。您的其他示例列表中的代码也是如此。也许您的意思是
int i = 0; MyClass myObject = MyClass(i);或其他什么。细节在这里实际上很重要。请返回您的编译器并检查您发布的代码是否实际上是您编译的代码 -
编辑后您的代码仍然无效。我也不确定你的问题是什么。编译器知道要做什么,因为有一个标准,它可以控制分配的位置和时间。
-
请问到底什么是无效的?另外,我发布这个问题是希望获得有关编译器功能和程序集的专业答案。例如答案可能在 operator= 等,但我仍然在问,因为我想知道它的实际行为。
-
我现在对那些基础知识什么是什么以及如何编写代码不感兴趣。我对建筑和背景感兴趣。
-
“编译器功能和程序集”、“架构和背景”不是标准强制要求的;所需要的只是给定输入代码的可观察行为的某种结果。参考文档将解释该行为是什么,并可能建议实现它的典型方法。对于其他任何事情,告诉你的编译器输出 ASM 并自己阅读。
标签: c++ constructor compiler-construction