首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么说C++不支持参数多态性?

为什么说C++不支持参数多态性?
EN

Stack Overflow用户
提问于 2016-04-29 22:09:09
回答 1查看 2.1K关注 0票数 11

根据维基百科的参数多态性页面

一些类型多态性的实现表面上类似于参数多态性,同时也引入了一些特殊的方面。一个例子是C++模板专门化。

问题:,为什么说C++只实现一些表面上类似于参数化多态性的东西?特别是,模板不是参数多态的完整示例吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-30 01:29:09

为什么说C++只实现一些表面上类似于参数化多态性的东西?特别是,模板不是参数多态的完整示例吗?

C++中的模板函数是基于参数的“替换”工作的。这实际上意味着编译器生成另一个版本的函数,其中模板参数被硬编码到函数中。

假设您在C++中有这样的内容:

代码语言:javascript
运行
复制
template <typename T>
T add(T a, T b) {
    return a + b;
}

int main() {
    int i = add(2, 3);
    double d = add(2.7, 3.8);
    return i + (int)d;
}

在编译过程中,这将产生两个函数:int add(int a, int b) { return a + b; }double add(double a, double b) { return a + b; } --一个函数只处理ints,另一个只处理双重。没有多态性。

因此,实际上,您最终得到的实现与参数变化的数量一样多。

你可能会问:“,但为什么这不是参数多态性??”

你需要完整的源代码的'add‘函数,以便调用它与您自己的特殊变化的东西,重载二进制'+’操作符!-这是细节,使差异。

如果C++具有适当的参数多态(例如,C# ),那么'add‘的最终编译实现将包含足够的逻辑,以便在运行时确定“+”重载对于任何可接受的“添加”参数都是什么。你不需要这个函数的源代码,就可以用你发明的新类型来调用它。

,这在现实中意味着什么?

但是不要理解这一点,就好像C++没有那么强大,或者C#更强大。这只是许多语言特性细节之一。

如果您拥有模板化函数可用的完整源代码,那么C++的语义要好得多。如果您只有一个静态或动态库可供使用,那么参数多态实现(例如C#)就更好了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36948205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档