默认模板参数和部分特化

2024-01-07

请向我解释为什么下面的代码符合并完美运行。 我很困扰。

#include<iostream>
template<class A = int, class B=double>
class Base
{};

template<class B>
class Base <int, B>
{
public:
  Base()
  {
     std::cout<<"it works!!!!!\n";
  }
};

int main()
{
  Base<> base; // it prints "it works!!!!!"
  return 0;
}

难道不应该落入模板类Base的广义形式吗?


默认参数适用于专业化——事实上,专业化必须接受(可以这么说)基本模板的默认参数。尝试在专业化中指定默认值:

template<class A = int, class B=double>
class Base
{};

template<class B=char>
// ...

...是一个错误。

同样,如果我们更改专业化,使其专业化针对某种类型other比基本模板提供的默认值:

template<class A = int, class B=double>
class Base
{};

template<class B>
class Base <char, B>

...然后将选择基本模板。

所以,发生的事情是这样的:首先选择模板参数的类型。在这种情况下(实例化时未指定类型),两种类型都基于基本模板中指定的默认模板参数。

然后(作为一个基本上独立的步骤),它对适合这些参数类型的所有模板执行重载解析的模拟。与重载决策一样,显式指定的类型优于隐式指定的类型,因此您的专业化(指定了int显式地)优于基本模板(它指定了int隐含地)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

默认模板参数和部分特化 的相关文章

随机推荐

  • 无法在 Android 中导入 com.google.cloud.speech.v1.SpeechGrpc

    我正在尝试使用谷歌的语音API https github com GoogleCloudPlatform android docs samples tree master speech Speech在Android项目中 示例项目有效 我在
  • Kendo Grid:工具栏模板问题

    我有一个列出道路信息的网格 并且需要一个工具栏模板 该模板允许我通过从 DropDownList 中选择特许权来过滤道路 像这样的东西 http demos telerik com aspnet mvc grid toolbar templ
  • 如何在服务器上运行java程序?

    我制作了一个 java 应用程序 将 csv 文件中的数据存储到 MySql 数据库中 现在我的客户希望它将此应用程序上传到他的网络空间 他为其网站占用的网络空间 以便他可以在该服务器上运行该程序 我用过FileZilla软件将程序上传到他
  • exoplayer 示例上的自定义 UI

    我真的需要帮助 如果你什么都不知道 请不要给我负面评价 如果有什么困扰你评论 我想在 Exoplayer 中为我的播放器编写自定义 UI 更改暂停播放按钮或添加新按钮 例如播放器速度下一个等 我使用 github 上的 Exoplayer
  • 如何在共享点中创建子列表

    是否可以在共享点中创建子列表 我目前正在使用文件夹来组织我的内容 但在以编程方式访问文件夹时 文件夹在共享点中是完全不同的概念 我想实现类似的目标 web 名单A 子列表1 子列表2 B表 子列表1 子列表2 EDIT 1 我正在尝试在网络
  • 使用 javascript 从数组中存在的字符串中删除双引号

    我有一个像这样的数组 数组 苹果 橙子 梨 我想删除数组中每个字符串开头和结尾的双引号 数组 苹果 橙子 梨 我尝试循环遍历数组的每个元素并进行字符串替换 如下所示 for var i 0 i lt array length i array
  • 如何一次关闭所有打开的选项卡?

    如果我打开了 10 个选项卡 我必须分别使用 q 关闭每个选项卡 我怎样才能一次性关闭它们呢 最短 最简单 最快的方法是 qa 要保存所有选项卡中的工作并退出 wqa
  • 在 Internet Explorer 中输入文件长度

    我想获取为输入文件选择的文件数 在 HTML 中 我有
  • 为什么 Dart 中显式使用“.cast<>()”函数而不是“as <>”

    在我的问题中Dart 2 X List cast 不组合 https stackoverflow com questions 49539879 dart 2 x list cast does not compose答案需要转换List
  • 如何发布Web应用程序?

    我真的不知道如何在Web开发中正确执行从离线开发到实时Web服务器的部署 我主要依靠直觉 但这或多或少是我到目前为止所做的 我有一个 python 或 php 的 Web 应用程序 并将其托管在实时 Web 服务器上 我用的是离线开发版本
  • 使用终端和 MacFusion 时出现 GIT_DISCOVERY_ACROSS_FILESYSTEM 问题

    我使用 MacFusion 和 OSXFuse 类似于 MacFuse 通过 SSH 将我的服务器安装到我的办公室计算机上 当我 cd 进入服务器上的 Rails 工作目录时 我在 zsh 提示符中看不到任何 git 信息 如果我尝试 gi
  • Android 中的 HTTP 客户端 API 级别 11 或更高级别

    我有 Jersey 实现的 Restful Web 服务 我通过 HTTP 客户端从 Android 进行连接以获取数据 它在 API 级别 10 及更早版本中工作正常 但在 API 级别 11 或更高版本上则不行 我很感激任何帮助 我在这
  • 按元素上的条件值对 numpy 数组元素进行排序

    我需要通过增加与另一个点的距离来对点的 numpy 数组进行排序 import numpy as np def dist i j ip jp return np sqrt i ip 2 j jp 2 arr np array 0 0 1 2
  • @Valid 注释在应用于 MultipartFile 对象时会被忽略

    这是我的控制器 它接受一个multipart form data有两个字段的请求 form and file The form字段是一个MyObject the file字段是一个MultipartFile 两个变量都注释为 Valid 因
  • 自定义商店页面产品以直接进入联属网站

    我需要在 WooCommerce 上使用什么 这样当您在商店 目录页面上看到产品时 它会直接链接到联属网站 而不是通过单个产品页面 然后 如果可能的话 在新选项卡中打开它 Thanks 更新 添加了 WC 3 兼容性 对于您的情况 您需要自
  • DDD,反腐败层,如何做?

    目前 我们必须构建一个基于遗留应用程序的应用程序 旧应用程序的代码应该被丢弃并重写 但正如通常情况一样 我们需要在其基础上创建新的东西 而不是重写它 最近 我们决定走领域驱动设计之路 因此 反腐败层可以解决我们的问题 据我了解 这样应该可以
  • 如何在 Tornado 中将异步函数和 gen 函数包装在一起?

    如何在 Tornado 中将异步函数和 gen 函数包装在一起 我的代码如下所示 错误是 Future 对象没有属性 body 我是否以错误的方式放置了装饰器 import tornado httpclient import tornado
  • 如何使这种排序不区分大小写?

    def sortProfiles p return sorted p key itemgetter first name 我有一个带有字典的列表 这个函数允许我按他们的名字对他们进行排序 但是 它区分大小写 gt gt gt from op
  • 甲骨文银行家规则

    为什么 Oracle 不使用银行家统治 http en wikipedia org wiki Rounding Round half to even 舍入方法 精确的十进制算术是一个庞大而复杂的课题 如果你想阅读关于这个主题的 ahem O
  • 默认模板参数和部分特化

    请向我解释为什么下面的代码符合并完美运行 我很困扰 include