gpt4 book ai didi

c++ - 为什么 C++ 不使用 Java 之类的泛型类型删除?

转载 作者:行者123 更新时间:2023-12-03 11:15:02 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

10 个月前关闭。




Improve this question




虽然Java的类型删除有明显的优势(主要是减少了生成的代码)为什么C++没有这个特性?我知道这种类型的泛型有许多其他限制,比如你不能在函数内部使用泛型类型(因为它被删除了),你只能将“类”类型传递给它,而不是像 C++ 等中的原始类型等等。
但是如果需要的话,C++ 可以同时拥有......当用户想要在函数内部使用类型时,他可以使用模板样式,否则他可以在泛型类/函数的声明期间使用类型删除样式。为什么不是这样?我不想要任何基于意见的答案.. 究竟是什么阻止了这一点?
编辑
例如,

class A {
virtual void do_something() {}
};

class B: public A {
virtual void do_something() {}
};

template <class T>
void call_do_something(T arg) {
arg.do_something();
}

int main {
A a = new A()
call_do_something(a);
B b = new B()
call_do_something(b);
retrun 0;
}
据我所知,在编译时,这将生成两个版本的 call_do_something,一个用于 A,一个用于 B。但是 java 中的等效代码只会生成一个。这将减少使用容器时生成的代码。这是我想知道的示例用例,如何有效处理。我绝不是想说 Java 在所有情况下都比 C++ 具有更好的泛型。对困惑感到抱歉。

最佳答案

你认为的优势,其他人可能认为是劣势。例如,类型删除访问意味着您要为访问支付性能损失,并且不能在编译时进行静态类型检查。
C++ 中有类型删除的函数对象 - std::function ,因此您可以在代码中使用它们,但请记住,这样做有缺点。

关于c++ - 为什么 C++ 不使用 Java 之类的泛型类型删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66138911/

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