复制构造函数中的省略号有何含义?

2024-04-04

考虑以下程序:

#include <iostream>
struct Test
{
    int a;
    Test() : a(3)
    { }
    Test(const Test& t...)
    {
        std::cout<<"Copy constructor called\n";
        a=t.a;
    }
    int get_a()
    {
        return a;
    }
    ~Test()
    {
        std::cout<<"Destructor is called\n";
    }
};
int main()
{
    Test t;
    Test* t1=new Test(t);
    std::cout<<t.get_a()<<'\n';
    std::cout<<t1->get_a()<<'\n';
    delete t1;
}

仔细观察复制构造函数参数中的三个点 当我尝试这个程序时,我真的很惊讶。它有什么用呢?这是什么意思?

语言规范对此有何规定?

我知道三个点用于表示可变长度函数中的可变长度参数 喜欢printf() and scanf()等等以及 C99 引入的可变参数宏。在 C++ 中,如果我没记错的话,它们被用在可变参数模板中。
这段代码格式正确吗?这个可变参数复制构造函数可以接受任意数量的参数吗?

它在 g++ 4.8.1 和 MSVC 2010 上编译并运行良好。


标准草案第8.3.5 [dcl.fct] says , ...是同义词... unless ...是抽象声明符的一部分(强调我的):

[...]如果参数声明子句以省略号终止 或函数参数包(14.5.3),参数数量应 等于或大于不具有的参数数量 默认参数,不是函数参数包。在哪里 语法正确,并且“...”不属于 抽象声明符,“, ...”与“...”同义.[...]

所以它是一个可变参数函数 https://stackoverflow.com/q/1657883/1708801据我所知,在没有额外参数的情况下,这也是一个有效的复制构造函数,来自部分12.8 [类.副本]:

类 X 的非模板构造函数是复制构造函数,如果其 第一个参数的类型为 X&、const X&、易失性 X& 或 const 易失性 X&,或者没有其他参数,或者所有其他参数 参数有默认参数 (8.3.6)。

这个注释说省略号不是参数:

void g(int = 0, ...); // OK, ellipsis is not a parameter so it can follow
                      // a parameter with a default argument

上面的规范性文本支持了这一点:

如果参数声明子句以省略号终止[...]

请注意,因为有人问抽象声明符是一个没有标识符的声明符。

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

复制构造函数中的省略号有何含义? 的相关文章

  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 当我单击 C# 中的“取消”按钮时重定向到新页面(Web 部分)

    Cancel button tc new TableCell btnCancel new Button btnCancel Text Cancel btnCancel Click new EventHandler btnCanel Clic
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 无法使用 Ninject 将依赖项注入到从 Angular 服务调用的 ASP.NET Web API 控制器中

    我将 Ninject 与 ASP NET MVC 4 一起使用 我正在使用存储库 并希望进行构造函数注入以将存储库传递给其中一个控制器 这是实现 StatTracker 接口的上下文对象 EntityFramework public cla
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • 单元测试ServiceLoader

    我有一个使用的方法ServiceLoader使用资源加载服务 public List
  • 如何绘制独立于 DPI 的 GDI + 文本

    我正在使用 GDI 绘制文本 我最近注意到 当 DPI 更改时 该文本会自动缩放 有没有办法让GDI 文本绘制独立于DPI 例如 我想绘制最大 20 像素的文本 无论 DPI 是多少 是否可以 这个怎么做 下面是示例代码 我想以恒定的大小绘
  • 为什么 UIView 的框架没有在 ViewDidLayoutSubviews 中更新?

    我正在尝试更新一个框架UIView其中包含按钮和标签 我正在尝试更新它viewDidLayoutSubviews 我也尝试过viewDidLoad viewWillAppear viewDidAppear 我想更改视图的 y 位置 orig
  • Android 中 GridView 最后一行的布局问题

    这是我的 GridView 我每行有 3 个项目 如图所示 视图中的最后一行仅包含一个项目 如果最后一行包含 3 个项目 则网格视图会正确滚动到最后 如果最后一行的项目少于 3 个 则视图的滚动幅度不会超过图片中显示的范围 GridView
  • Linq 和 StreamReader 获取行

    使用 LINQ 从制表符分隔的 txt 文件中获取每个字符串 然后获取每个单词 通常是 string Split 的做法 的有效方法是什么 var v from line in File ReadAllLines select n 我相信这
  • 回调内更新的角度变化检测

    我正在寻找一个简单问题的推理 我有一个简单的组件 它有一个布尔属性 我在组件的模板中显示该属性 现在的问题是 如果我在回调中更新此属性 该属性确实会更新 在组件中 但更新的值不会呈现 更改检测不起作用 我必须显式调用changeDetect
  • matplotlib - 多边形边缘的半径 - 这可能吗?

    我正在 matplotlib 中绘制一个多边形 我输入了所有点的坐标 在某些点之间 我希望有 圆形 或 径向 边缘而不是直线 例如绘图上的点 1 和 2 这可能吗 如果不可能 最有效的绘制方法是什么 编辑 罗格的解决方案效果很好 您可以通过
  • 哪种 WPF 控制套件最适合 MVVM? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 似乎真正评估 UI 控制套件的唯一方法是下载试用版并投入大量时间来了解其局限性和设计缺陷 然而 有这么多
  • 暂时解压字典

    说吧 我有一个这样的迪克 my dictionary a 1 c 5 b 20 d 7 现在 我想用我的 dic 执行此操作 if my dictionary a 1 and my dictionary d 7 print my dicti
  • 如何自定义机器人框架报告中生成的日志文件

    I want only test scenarios in the Log file of the report generated in the Robot Framework but while clicking upon the Te
  • 如果 git 依靠文件快照运行,为什么 .git/ 不会随着时间的推移而变得巨大?

    我一直在读 git 的书 在这本书中 我了解到 git 通过拍摄您使用的文件的快照来发挥作用 而不是像其他 VCS 那样进行增量 这有一些极好的好处 然而 这让我想知道 随着时间的推移 包含这些快照的 git 文件夹不应该膨胀得太大吗 有些
  • 如何在Access VBA中引用Excel对象?

    为了能够使用 Access 2007 VBA 脚本中的 Excel 对象和常量 我必须做出哪些声明 Dim wb As Workbook or Set objExcelApp New Excel Application or Borders
  • 如何格式化 android-range-seek-bar 的最小值和最大值?

    我使用 android range seek bar 控件https github com anthem android range seek bar https github com anothem android range seek
  • 如何将直方图的条形与 x 轴对齐?

    考虑这个简单的例子 library ggplot2 dat lt data frame number c 5 10 11 12 12 12 13 15 15 ggplot dat aes x number geom histogram 看到
  • PHP - $_FILES 数组为空[重复]

    这个问题在这里已经有答案了 是的enctype属性已设置 其他表单 表单处理程序工作正常 因此临时目录必须是可写的 我没主意了 我检查了帖子值并 POST file 存在并包含文件名 这是我的表单和处理它的 PHP 我缺少什么
  • 使用 javascript 单击 asp.net 按钮“您确定吗?”在回发之前

    我有一个 asp 按钮 它将触发删除 并希望有一个客户端 JavaScript 你确定弹出窗口可以防止任何意外吗 什么是 javascript 来处理这个 您可以将 javascript 添加到按钮的 OnClientClick 事件中 关
  • 为什么 BCL 没有 CRC 类?

    为什么 NET 基类库没有 CRC 类 Eric Lippert 对 为什么功能 X 没有实现 有最好的解释 我认为他对为什么或为什么不使用该语言实现一两件事有所了解 有人问我 为什么 C 不实现 功能 X 一直如此 答案 总是一样的 因为
  • 如何忽略传递给数据类的额外参数?

    我想创建一个config dataclass为了简化白名单和对特定环境变量的访问 键入os environ VAR NAME 相对于而言是乏味的config VAR NAME 因此 我需要忽略我的中未使用的环境变量dataclass s i
  • 如何在刷新时保持我在页面上的位置(AJAX)

    我知道这只能通过 AJAX 实现 但我从未使用过 AJAX 在我的网站上 您可以保留游戏 Magic 中的卡牌列表 这就是完整的列表 您必须按一个按钮才能添加卡片 每张卡片都有这个按钮 当您添加它时 它会将卡片添加到您的列表中 然后刷新并再
  • 复制构造函数中的省略号有何含义?

    考虑以下程序 include