gpt4 book ai didi

c++ - 堆栈上的多态对象?

转载 作者:IT老高 更新时间:2023-10-28 12:46:09 24 4
gpt4 key购买 nike

Why is there no base class in C++? , I quoted Stroustrup关于为什么所有类的通用 Object 类在 c++ 中存在问题。在那个引用中有这样的声明:

Using a universal base class implies cost: Objects must be heap-allocated to be polymorphic;

我真的没有仔细看它,因为它的on Bjarnes home page我想很多人都看过这句话并报告了任何错误陈述。

然而,一位评论者指出,情况可能并非如此,回想起来,我找不到任何充分的理由说明这应该是正确的。一个简短的测试用例会产生 VDerived::f() 的预期结果。

struct VBase {
virtual void f() { std::cout <<"VBase::f()\n"; }
};

struct VDerived: VBase {
void f() { std::cout << "VDerived::f()\n"; }
};

void test(VBase& obj) {
obj.f();
}

int main() {
VDerived obj;
test(obj);
}

当然,如果 test 的正式参数是 test(VBase obj),情况将完全不同,但这不是堆栈与堆参数,而是复制语义。

Bjarne 完全错了还是我在这里遗漏了什么?

附录:我应该指出,Bjarne 在原始常见问题解答中添加了

Yes. I have simplified the arguments; this is an FAQ, not an academic paper.

我理解并同情 Bjarnes 的观点。另外我想我的眼睛是扫描那句话的一对。

最佳答案

在我看来像多态性。

当你有 indirection 时,C++ 中的多态是有效的;即,pointer-to-Treference-to-TT 的存储位置完全无关紧要。

Bjarne 也犯了“堆分配”的错误,这在技术上是不准确的。

(注意:这并不意味着通用基类是“好”的!)

关于c++ - 堆栈上的多态对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5894775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com