我很惊讶地意外地发现以下方法是有效的:
#include <iostream>
int main(int argc, char** argv)
{
struct Foo {
Foo(Foo& bar) {
std::cout << &bar << std::endl;
}
};
Foo foo(foo); // I can't believe this works...
std::cout << &foo << std::endl; // but it does...
}
我将构造的对象的地址传递给它自己的构造函数。这看起来像是源代码级别的循环定义。标准是否真的允许您在对象构造之前将对象传递到函数中,或者这是未定义的行为?
我想这并不奇怪,因为所有的类成员函数都已经有一个指向其类实例的数据的指针作为隐式参数。并且数据成员的布局在编译时是固定的。
注意,我并不是在问这是不是有用或者是一个好主意;我只是修修补补地学习更多关于类的知识。
https://stackoverflow.com/questions/32608458
复制相似问题