首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用简单的复制构造函数传递类对象,但没有输出?

使用简单的复制构造函数传递类对象,但没有输出?
EN

Stack Overflow用户
提问于 2012-11-04 11:20:42
回答 1查看 366关注 0票数 8

我用GCC和Clang尝试了这个程序,但都没有输出任何内容

代码语言:javascript
复制
#include <iostream>

struct A {
  A(){}

  template<typename T>
  A(T &) {
    std::cout << "copied!";
  }
};

void f(...) { }

int main() {
  A a;
  f(a);
}

根据我的标准阅读,这个程序应该输出"copied!"。有没有人能告诉我,我是错了还是这两个编译器有个bug?

EN

回答 1

Stack Overflow用户

发布于 2012-11-04 12:00:30

看起来您所期望的是由标准定义的行为。

模板函数不会阻止创建复制构造函数/赋值运算符。所以模板函数不会阻止一个类被认为是“简单的可复制的”。然而,当涉及到实际复制它们时,它们确实参与了重载解析,因此它们可以进行干预。由于本例中的a是非常量l值,因此它比A(const A&)更适合签名A(A&)。所以它调用模板函数。

(尽管我不明白你为什么不在你的问题中解释所有这些,因为你显然已经做了研究。)

然而,考虑到这是一个多么小的角落案例,我不会依靠这种行为来强迫平凡可复制的类不被平凡地复制。

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

https://stackoverflow.com/questions/13215764

复制
相关文章

相似问题

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