初始化忽略构造函数模板

2024-01-03

在追查一些错误时,我偶然发现了以下初始化行为,这对我来说似乎很奇怪:在对现有构造函数进行初始化检查时,似乎存在忽略拟合构造函数的模板的情况。例如,考虑以下程序:

#include <iostream>

template<class T>
struct A {
 A() {};
 template<class S>
 A(const A<S>& a) {std::cout << "constructor template used for A" << std::endl;};
};

template<class T>
struct B{
 B() {};
 B(const B<int>& b) {std::cout << "constructor used for B" << std::endl;};
};

int main() {
 A<int> a;
 B<int> b;
 A<int> aa = a;
 B<int> bb = b;
 A<double> aaa = a;
}

对我来说,这会产生输出

constructor used for B
constructor template used for A

这意味着它不使用 main 第三行中的构造函数。为什么不?有理由吗?或者我的语法有问题吗?该模板似乎可以工作,因为它在最后一行中已成功使用。

我知道这个例子看起来过于复杂,但是各种简化使我想要显示的行为消失了。另外:初始化将使用模板专门化,这也是我目前防止这种情况导致错误的方法(它首先导致错误的地方)。

如果我的问题有任何问题,我很抱歉,我不是程序员,我不是母语人士,这是我的第一个问题,请原谅我。


编译器提供了一个隐式声明的非模板复制构造函数,其签名相当于

A(const A& a);

because模板构造函数不被视为用户定义的复制构造函数,即复制构造函数必须是非模板。

隐式声明的复制构造函数在重载决策中比模板版本更匹配,并且是在复制构造函数时被调用的构造函数。A<T>从一个A<T>。这可以用一个简单的例子来说明,其中用户定义了A(const A&):

#include <iostream>

template<class T>
struct A 
{
 A() {};

 A(const A& a) {
   std::cout << "copy constructor used for A" << std::endl;
 }

 template<class S>
 A(const A<S>& a) {
   std::cout << "constructor template used for A" << std::endl;
 }
};

int main()
{
  A<int> ai;
  A<double> ad = ai; /  calls template conversion contructor
  A<int> ai2 = ai;   // calls copy constructor A(const A&);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初始化忽略构造函数模板 的相关文章

  • 为什么我应该使用内联代码? [复制]

    这个问题在这里已经有答案了 我是一名 C C 开发人员 这里有几个始终困扰我的问题 常规 代码和内联代码之间有很大区别吗 主要区别是什么 内联代码只是宏的一种 形式 吗 选择内联代码时必须进行什么样的权衡 Thanks 表现 正如之前的答案
  • 如何创建语法突出显示文本框[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何使用 C Net 创建语法突出显示文本框 Take 闪烁网 http scintillanet codeplex com 并采取其
  • C++:字符串流有什么好处?

    谁能告诉我一些在 C 中使用字符串流的实际例子 即使用流插入和流提取运算符输入和输出到字符串流 您可以使用字符串流来转换任何实现operator lt lt 到一个字符串 include
  • 错误:“运行所选代码生成器时出错:包恢复失败”

    我正在尝试将控制器添加到 ASP NET Core 项目中的解决方案中 当我尝试这样做时 我收到此错误 我收到相同的消息 为控制器添加最小依赖项和完整依赖项 我也有这个问题 使用实体框架添加控制器 gt 带有操作的 API 控制器 将给出
  • 等待运算符错误

    我的代码有问题 我怎么解决这个问题 这个问题出现在await操作符中 public MyModel HttpClient client new HttpClient HttpResponseMessage response await cl
  • C++ 并行任务的开销

    我有以下简单的功能 include
  • C 链表销毁函数

    我正在尝试学习 C 和很多人一样 我对指针有点困惑 无论如何 我创建了一个递归函数来销毁我的链表 但是正如我调试的那样 当我从函数返回时 列表的头部不应该为空 所以我猜这是对指针的一些基本误解 这是函数 void destroy struc
  • 使用 LINQ 展平嵌套字典

    所以我有一本形式的字典Dictionary
  • UI 线程正在阻塞调用 COM 对象的后台线程

    我正在开发一个通过第三方 COM 库与外部设备通信的应用程序 我试图让与设备的所有通信都通过后台线程 以防止通信问题搞砸我的应用程序 并消除在 UI 线程中进行通信所引入的一些其他复杂性 问题是 每当发生导致主 UI 线程阻塞的情况 即调用
  • 有没有办法找到dll公开的所有函数

    我一直在寻找一种方法来获取映射到 dll 中函数名称的所有字符串 我的意思是您可以调用 GetProcAddress 的所有字符串 如果你对 dll 进行十六进制转储 符号 字符串 就在那里 但我认为必须有一个系统调用来获取这些名称 如果您
  • 将视频上传/保存到数据库或文件系统

    我以前从未尝试过保存视频 所以我对此了解不多 我知道如果视频很小 我可以转换为字节数组并保存到数据库 但是为了提高效率 我想了解如何将任何上传的视频保存到我的服务器文件中 然后只保存该文件的文件路径我的数据库表中的视频 我完全不知道如何开始
  • 如何在Unity Inspector中创建多维数组?

    如何在 Unity Inspector 中创建枚举多维数组并使其可序列化 以便我可以从不同的脚本调用它 public enum colors red blue green yellow cyan white purple public in
  • 为什么我收到编译错误“使用已删除的函数 'std::unique_ptr ...”

    我收到一条巨大的编译错误消息 c mingw include c 6 1 0 bits predefined ops h 123 18 error use of deleted function std unique ptr lt Tp D
  • 使用信号和槽更新指针

    我对 Qt 很陌生 请帮我解决这个问题 我正在使用线程在后台执行密集操作 同时我想更新 UI 所以我使用 SIGNALS 和 SLOTS 为了更新 UI 我发出一个信号并更新 UI 让我们考虑下面的示例代码 struct sample QS
  • WCF 服务中的缓冲区大小

    我们有一个 WCF 服务 它执行某些存储过程并将结果返回给 silverlight 客户端 某些存储过程最多返回 80K 行 下面给出的是 web config 中服务的设置
  • 我的代码哪里有泄漏?

    下面是我的代码 它打开一个 XML 文件 old xml 过滤无效字符并写入另一个 XML 文件 abc xml 最后 我将再次加载 XML abc xml 当执行以下行时 出现异常 表示 xml 文件被另一个进程使用 xDoc Load
  • 从 AuthorizeAttribute 继承的属性不起作用

    我目前正在尝试根据用户角色在新的 ASP MVC 5 应用程序中实现安全性 目标是防止用户在没有特定角色 或更高角色 的情况下访问某些控制器或控制器方法 根据到目前为止我所读到的问题 我创建了一个继承 AuthorizeAttribute
  • 打印任何类型的数组和列表的通用方法[重复]

    这个问题在这里已经有答案了 每当我调试一段涉及整数 双精度 字符串等数组或列表的代码时 有时我更喜欢打印它们 我为此所做的是为不同类型编写重载的 printArray printList 方法 for e g 我可能有这 3 种方法来打印各
  • 如何从 C# 中的 Web Api 方法正确获取字节数组?

    我有以下控制器方法 HttpPost Route SomeRoute public byte MyMethod FromBody string ID byte mybytearray db getmybytearray ID working
  • 为什么 INT64_MIN 的定义不同?为什么他们的行为不同?

    The stdint h我公司的标题是 define INT64 MIN 9223372036854775808LL 但在我项目的一些代码中 一位程序员写道 undef INT64 MIN define INT64 MIN 92233720

随机推荐

  • Rx 处理订阅

    处理循环中创建的订阅的推荐方法是什么 在下面的示例中 我在 for 循环中生成订阅并将它们添加到List并通过对瘙痒明确地处置它们List这对我来说似乎有点难闻 我认为必须有一种更干净的方法来清理订阅 除非 GC 在运行时处理它们 我需要明
  • 宏和成员函数冲突

    我有一个问题 std numeric limits min 与 windef h 中定义的 min 宏冲突 有没有办法在不取消定义 min 宏的情况下解决此冲突 下面的链接提供了一些提示 但是我无法设法在静态成员函数中使用括号 我可以对宏使
  • Angularjs 如何获取 URL 引用?

    在 AngularJS 中 我有一个登录控制器 如果用户到达该页面但未登录 则应用程序中的每个页面都会重定向到该登录控制器 在登录序列之后 我想将用户重定向回他们所在的页面来自 最好的方法是什么 您可以使用history back 让用户导
  • 从 matplotlib AxesSubplot 获取值

    我想从中获取价值matplotlib axes AxesSubplot这是从返回的pandas Series hist http pandas pydata org pandas docs version 0 17 0 generated
  • PHP - 智能、容错的字符串比较

    我正在寻找例程或方法来寻找容错字符串比较 假设我们有测试字符串 ak nka 是的 它包含 CE 字符 现在 我想接受以下任何字符串作为OK cakanka c kank aKaNKA CAKANKA CAAKNKA CKAANKA cak
  • C# 中的子字符串单词

    我想获取子串XXX and ZZZ来自我在 c 中的结果文本文字形式 XXX ZZZ WWW but Result LastIndexOf 不影响 因为我有 char 表示单独的两个单词 我找不到第一个和第二个的索引 用我的话说就是 cha
  • 如何优化 JetPack Compose 列表性能?

    我有一个简单的可组合函数 其中包含 LazyColumn Composable fun MyScreen itemList List
  • 未捕获的 ReferenceError:$ 未定义 Webpack 和嵌入脚本

    我正在使用 webpack 创建 js 包 var path require path var webpack require webpack const ExtractTextPlugin require extract text web
  • 你能推荐一些关于 Linux 上的 Epoll 的指南吗?

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要了解 Linux 系统上的 Epoll 您能推荐有关 epoll 库的手册或指南吗 需要更详细的指南 最好有一些例子 帮我 感谢您的
  • 仅在 Jenkins(和/或 Hudson)上检查已更改文件的 Checkstyle 和 Findbugs

    我们使用大量遗留代码 并考虑为新代码引入一些指标 是否可以让 Findbugs 和 Checkstyle 仅在更改的文件而不是完整的项目上运行 最好确保只签入最低质量的文件 但代码库本身 尚未 尚未被触及和评估 以免人们因数千个问题而感到困
  • 2 PDF 上 R Markdown 中的徽标

    我使用下面的代码在 pdf 版本的 r markdown 中添加公司徽标输出很好 我需要在每一页上添加 2 个徽标 一个用于我的客户 另一个用于我们的公司 可以使用 r markdown 在 pdf 中添加 2 个徽标 title Comp
  • 是否可以在函数体中获取函数名? [复制]

    这个问题在这里已经有答案了 在BASH中 是否可以在函数体中获取函数名称 以下面的代码为例 我想在其正文中打印函数名称 Test 但 0 似乎指的是脚本名称而不是函数名称 那么如何获取函数名呢 bin bash function Test
  • 在 Shell 中连接两个包含不匹配行的文件

    文件1 log 207 46 13 90 37556 157 55 39 51 34268 40 77 167 109 21824 157 55 39 253 19683 文件2 log 207 46 13 90 62343 157 55
  • 如何为图像编写良好的替代文本,以帮助屏幕阅读器和盲人用户理解图片的内容?

    如何为图像编写良好的替代文本 以帮助屏幕阅读器和盲人用户理解图片的内容 如果我们使用 Alt 文本 那么如果我们在菜单图像等特殊情况下使用两者 则 Title text 中应该包含什么内容 我是一名屏幕阅读器用户 并将使用 Stack Ov
  • 带有codeigniter框架的php

    function invitation result this gt load gt database user id GET user id qry mysql query select from sent invitations whe
  • 裁剪、调整大小和缩放图像之间有什么区别?

    我正在使用 Perl 的Image Imlib2 https metacpan org pod Image Imlib2包从较大的图像生成缩略图 我之前曾使用多个 ImageMagick 接口 PHP Ruby Python 完成过此类任务
  • 添加权利文件时,权利无效 0xE8008016

    我正在尝试进行临时分发 当我使用 XCode 时 该应用程序在我的手机上安装得很好 为了准备临时分发 我创建了默认权利文件 取消选中 get task allow 框 将权利文件名添加到代码签名权利行 并尝试在我的手机上安装 如果我在构建设
  • 如何在Interface Builder中实现视觉效果视图?

    如何在 Interface Builder 中使用具有模糊和活力的视觉效果视图 我已将此项目拖到视图中 然后拖动UILabel到层次结构中的最后一个视图 充满活力的效果contentView我假设 这会导致顶部视图模糊 但没有可见的标签 我
  • 如何使用 CakePHP 模型中的电子邮件组件?

    我有一个非常简单的模型 我想将发送电子邮件例程添加到模型的方法之一 this gt Email gt delivery smtp this gt Email gt template default this gt Email gt send
  • 初始化忽略构造函数模板

    在追查一些错误时 我偶然发现了以下初始化行为 这对我来说似乎很奇怪 在对现有构造函数进行初始化检查时 似乎存在忽略拟合构造函数的模板的情况 例如 考虑以下程序 include