将 C 对象传递给它自己的构造函数:合法吗?
发现从自身构造一个对象可能会令人惊讶C确实是允许的。以下代码演示了这种意外行为:
#include <iostream> struct Foo { Foo(Foo& bar) { std::cout << &bar << std::endl; } }; int main(int argc, char** argv) { Foo foo(foo); // This works! std::cout << &foo << std::endl; // And this works too... }
在此代码中,Foo 类型的对象作为参数传递给其自己的构造函数。这可能看起来是一个循环定义,但 C 标准实际上允许这样做。
尽管对象 foo 未初始化,但代码以标准允许的方式操作它。具体来说,在对象完全初始化之前,允许绑定对其的引用或获取其地址。
缺陷报告 363 进一步解释了此行为,该报告得出的结论是引用有效并且允许获取类对象在完全初始化之前的地址并将其作为引用参数提供。
虽然利用此行为可能不寻常或不切实际,但它提供了对类的内部工作原理和有限方法的见解其中可以操作未初始化的对象。
以上是您可以使用自身作为参数来构造 C 对象吗?的详细内容。更多信息请关注PHP中文网其他相关文章!