复制构造函数没有被调用[重复]

2023-12-13

可能的重复:
为什么在这种情况下不调用复制构造函数?

考虑下面的示例程序:

#include <iostream>

using namespace std;

class sample
{
    private:
        int x;

    public:
        sample(int a=0) : x(a)
        {
            cout << "default ctor invoked\n";
        }

        sample(const sample& obj)
        {
            cout << "copy ctor invoked\n";
        }

};

int main()
{
    sample s2 = sample(20); //Line1
    sample s3 = 20; //Line2

    return 0;
}

In Line1,首先是构造函数sample类被调用explicitly参数为 20。然后我期望调用复制构造函数来初始化 s2。

在 Line2 中,首先是构造函数sample类被调用implicitly首先是参数 20。这里我也希望调用复制构造函数来初始化 s2。

在这两种情况下,复制构造函数都没有被调用?为什么会发生这种情况?我相信,我对复制构造函数调用的理解有问题。有人可以纠正我哪里出错了吗?


这是预料之中的。它被称为复制省略.

您的期望是正确的,但他们在 C++ 中做了一个例外(为了性能),这允许编译器将您的表达式视为一个实例的直接初始化,同时绕过复制构造函数。

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

复制构造函数没有被调用[重复] 的相关文章

  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个

随机推荐

  • RequestContext - RouteData 不包含操作

    因此 我创建了自己的 ControllerFactory 并且重载了 GetControllerSessionBehavior 以扩展 MVC 行为 为了完成我的自定义工作 我必须对被调用的操作使用反射 然而我偶然发现了一个奇怪的问题 我无
  • 并行继承层次结构真的是一种代码味道吗?

    我不知道如何在实践中避免并行层次结构 例如考虑一个必须在不同级别上创建 保存 编辑笔记的应用程序 它是一个基于 java swing 的应用程序 域层次结构 AbstractNote lt MonthNote lt DayNote lt P
  • 在 Rails 中设置可选字段

    我使用回形针将头像附加到用户身上 效果很好 但当新用户尝试注册时 它会抱怨头像太小且类型不正确 这就是我验证我的头像的方式 validates attachment size avatar less than gt 1 megabytes
  • Java中如何写入文本文件

    我正在用java做一个项目 我需要添加和修改我的 运行时的文本文件 该文件分组在 jar 中 我正在使用 class getResourceAsStream filename 这个方法我们 可以从类路径读取该文件 我想写入同一个文本文件 对
  • 使用 Google Apps 脚本将 Google Sheet 中的图表正确插入到文档中

    我想使用 Google Apps 脚本将图表从电子表格复制到文档中 插入图表是可行的 但存在 a 权限和 b 格式问题 可以按如下方式插入图表 var b d getBody var charts SpreadsheetApp getAct
  • 映射数组以设置空元素

    Given let input 0 1 2 7 我想得到 let output 1 22 333 4444 55555 666666 7777777 i e value equal key倍key 我怎么能够map 或等效 输入包括empt
  • JTree 延迟加载展开

    希望你一切都好 我有一个 JTree 我使用数据库查询 每个节点 延迟加载 我在屏幕上有一个按钮 当用户单击该按钮时 我会执行一些操作insert update delete在数据库中 然后将模型添加回Jtree仅使用 SQL 的根及其直接
  • 从 Html Agility Pack 下载中,我使用 9 个“HtmlAgilityPack.dll”中的哪一个?

    下载的 HTML Agility Pack zip 文件中有九个文件夹 Net20 Net40 Net40 客户端 Net45 sl3 wp sl4 SL4 windowsphone71 sl5 winrt45 我不知道这些文件夹名称的含义
  • 在 PHP 中将数组元素分配给变量

    我知道这是一个愚蠢的问题 但我被困住了 我有以下数组 Array type gt 8 message gt Use of undefined constant hola assumed hola file gt C wamp www WeC
  • 在 javascript(Angularjs) 中将对象数组转换为单个对象

    如何像这样转换对象数组 display name view dashboard value 1 display name view user value 0 to this view dashboard 1 view user 0 你可以尝
  • 在运行时重新加载 tomcat 日志记录?

    我们当前使用 Tomcat 7 并使用 Djava util logging config file 指定单个日志配置 并使用 Djava util logging manager org apache juli ClassLoaderLo
  • Android:分享到 Facebook Messenger 错误

    我已经尝试修复这个错误一周了 但仍然找不到问题所在 登录正常 但由于某种原因 共享到 Messenger 崩溃 我无法真正理解问题是什么 基本上 我将文本转语音保存到我的设备上 然后尝试共享它 文件保存到设备 我检查过 但Messenger
  • Flutter:创建覆盖进度条

    如何在 Flutter 中创建覆盖页面 基本上 今天我的页面中央有一个旋转器 现在 我希望当前页面淡出 90 不透明度 并在按下按钮时显示动画点 不知道该怎么做 感谢您的帮助 尝试用这个 class SamplePage extends S
  • 将曲线/模型拟合到 1/x 数据

    我有一个遵循 1 x 曲线模式的数据集 我想用模型来拟合数据的曲线 我尝试过使用多项式函数 但它看起来不太正确 因为多项式曲线备份 而我的数据渐近线在底部 我知道我在这里遗漏了一些术语 但是我该如何绘制曲线呢 1 x 曲线有名称吗 x lt
  • consteval 函数是否允许模板参数依赖于函数参数?

    在 C 17 中 以下代码是非法的 constexpr int foo int i return std integral constant
  • 剔除虚拟元素不适用于 Internet Explorer

    如果您在 Chrome 中运行此 Fiddle 则选择框会正确填充选项 A B 和 C 但是 如果您使用 Internet Explorer 版本 8 或 9 运行它 则它不起作用 我怎样才能修复这个小提琴以使其与 Internet Exp
  • VS 2013 中无需包含指令“math.h”即可使用 C++ 数学函数

    我很好奇为什么我可以在 C 中使用数学函数而不包含 math h 我无法通过谷歌搜索找到答案 这是我正在执行的简单代码 一切都在编译和运行 include
  • 在 g++ 中编译具有未初始化全局的 C 程序时出现“值的多重定义”,但在 gcc 中则不然

    我试图了解头文件中 extern 和全局变量声明的用法 因此我想出了以下用 C 编写的测试程序 main c 文件 main c include global h include
  • 选择区域内的地理点

    我有一个 SQL Server 2008 表 其中有一列地理数据类型 该值是一个点 纬度和经度 如何查询表以返回位置位于给定坐标 10 公里半径范围内的所有行 您可能需要 STDistance 方法 http msdn microsoft
  • 复制构造函数没有被调用[重复]

    这个问题在这里已经有答案了 可能的重复 为什么在这种情况下不调用复制构造函数 考虑下面的示例程序 include