【发布时间】:2020-11-09 07:45:41
【问题描述】:
在 C++ 中,我们能否从一个函数返回一个 A 的指针,该函数的实际返回值是一个不同的结构 B,它确实将第一个对象作为 A 的指针?
考虑以下场景。
struct B {
A* ptr;
// code...
B(A* _ptr)
{
// code...
}
};
B foo()
{
A* tmp;
// code...
return tmp;
}
B bar()
{
A* tmp;
// code...
return B(tmp);
}
foo() 方法能正常工作吗?能不能调用构造函数?
或者foo()将无法调用构造函数,它只在B按以下方式定义的情况下起作用,
struct B {
A* ptr;
// code...
B(A* _ptr) : ptr(_ptr)
{
// some code (doesn't changes `ptr`)
}
};
按以下方式或
struct B {
A* ptr; // NO more data elements other than `ptr`
B (A* _ptr) : ptr(_ptr) {
// some code (doesn't changes `ptr`)
}
};
如果有效,是因为B 中的A* ptr 是第一个对象吗?
我想知道在不同的 C++ 版本(
我想,bar 是最好的写法。
【问题讨论】:
标签: c++ constructor type-conversion implicit-conversion