显式复制构造函数

2023-12-13

我扩展了 std::string 以满足我的需要,必须将自定义函数构建到名为的字符串类中自定义字符串

我已经定义了构造函数:

    class CustomString : public std::string {
    public:
        explicit CustomString(void);
        explicit CustomString(const std::string& str);
        explicit CustomString(const CustomString& customString);
        //assignment operator
        CustomString& operator=(const CustomString& customString);
    ... };

在第三个构造函数(复制构造函数)和赋值运算符中,其定义为:

CustomString::CustomString(const CustomString& customString):
    std::string(static_cast<std::string>(customString)) 
{}
CustomString& CustomString::operator=(const CustomString& customString){
    this->assign(static_cast<std::string>(customString));
    return *this;
}

首先,因为这是“明确的”;意味着需要显式转换才能分配给另一个 CustomString 对象;它抱怨任务。

CustomString s = CustomString("test");

我不确定到底在哪里明确需要铸造。

如果复制构造函数不显式,代码可以正常工作,但我想知道并实现显式定义,而不是“猜测正确的转换”。


显式复制构造函数意味着复制构造函数不会被隐式调用,这就是表达式中发生的情况:

CustomString s = CustomString("test");

这个表达的字面意思是:创建一个临时的CustomString使用带有 a 的构造函数const char*。隐式调用复制构造函数CustomString从临时复制到s.

现在,如果代码正确(即,如果复制构造函数不显式),编译器将避免创建临时对象并通过构造来删除复制s直接使用字符串文字。但编译器仍然必须检查构造是否可以完成并在此处失败。

您可以显式调用复制构造函数:

CustomString s( CustomString("test") );

但我建议你完全避免临时的,只创建sconst char*:

CustomString s( "test" );

无论如何,这就是编译器会做的事情......

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

显式复制构造函数 的相关文章

  • EF7 中的脚手架不再产生“setter”

    我试图将我的个人项目从 Net 6 升级到 7 主要是为了找出重大更改 因此 我预计有些东西需要返工 情况总是如此 如果在某个时候我敢于完成这个项目 那么它就是一个非营利项目 但目前的情况还远未实现 作为现在的上下文 我正在管理一个包含类别
  • 如何将点光源转换为卵形/椭圆形?

    我希望通过具有不同 x 和 y 值的 vec2 半径将当前的圆形光变成椭圆形 有没有办法根据我当前在片段着色器中的代码来做到这一点 uniform struct Light vec4 colour vec3 position vec2 ra
  • 从文本文件中读取所有内容 - C

    我正在尝试从文本文件中读取所有内容 这是我写的代码 include
  • 如何使构造函数只能由基类访问?

    如果我想要一个只能从子类访问的构造函数 我可以使用protected构造函数中的关键字 现在我想要相反的 我的子类应该有一个构造函数 该构造函数可以由其基类访问 但不能从任何其他类访问 这可能吗 这是我当前的代码 问题是子类有一个公共构造函
  • LockBits 性能关键代码

    我有一个方法需要尽可能快 它使用不安全的内存指针 这是我第一次尝试这种类型的编码 所以我知道它可能会更快
  • ASP.NET Core 测试 - 没有方法 'public static IHostBuilder CreateHostBuilder(string[] args)

    我正在尝试在测试中设置我的应用程序并在中使用Startup s Configure method context Database EnsureCreated 并期待着Sqlite文件出现在Test sbin文件夹 这是我的代码 using
  • 使用工作表作为数据源的 VSTO Excel 的简单示例

    我想我遇到了 最简单的答案是最难找到的答案 的情况 而且我还没有遇到过任何搜索能够以直接的方式给我这个答案 这是为了Excel 2010 and VS 2010在现有 VSTO C 项目中 我有一个 Excel 工作表 其中包含 4 列数据
  • 通知另一个线程数据可用的最快方法是什么?有什么替代旋转的方法吗?

    我的一个线程将数据写入循环缓冲区 另一个线程需要尽快处理该数据 我本来想写这么简单的spin 伪代码 while true while a i do nothing just keep checking over and over proc
  • 如何获取字符串宽度

    我需要在类库中构建一个函数 该函数接受一个字符串和该字符串的特定字体 然后获取字符串的宽度 那么我怎样才能得到字符串边界宽度呢 另一种方法是使用TextRenderer 并致电its MeasureString http msdn micr
  • C 或 C++ 中是否有轻量级的多部分/表单数据解析器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑将多部分表单数据解析集成到 Web 服务器模块中 以便可以减轻后端 Web 应用程序 通常用动
  • 从网站保存嵌入的 pdf

    我正在编写一个小型 C 应用程序来管理供应商提供的 化学品 安全数据表 目前 我手动搜索该化学品并保存 pdf 并在我的程序中添加指向 pdf 的链接 问题是我还有很多化学品需要处理 所以最好将过程自动化 例如 化学品的部件号如下 2710
  • 自定义文件属性

    我需要遵循 在我的申请中 我有文件 需要随时签入和签出的文件 当我从应用程序中签出文档时 我需要将自定义属性添加到文件中 以便稍后在签入文档时可以识别它 我尝试使用以下代码使用 DSOFile 中的 OleDocumentPropertie
  • 在 C 中初始化结构体的静态数组

    我正在用 C 实现一个纸牌游戏 纸牌有很多种类型 每种纸牌都有大量信息 包括一些需要单独编写与其关联的脚本的操作 给定这样的结构 并且我不确定我的语法是否适合函数指针 struct CARD int value int cost This
  • 在javascript中调用c#函数[重复]

    这个问题在这里已经有答案了 可能的重复 从 Javascript 调用 ASP NET 函数 https stackoverflow com questions 3713 call asp net function from javascr
  • 从原始 URL 获取重定向 URL

    我的数据库中有一个表 其中包含一些网站的 URL 我必须打开这些 URL 并验证这些页面上的一些链接 问题是某些 URL 被重定向到其他 URL 对于这样的 URL 我的逻辑是失败的 有什么方法可以传递原始 URL 字符串并获取重定向的 U
  • 使用 STL 迭代器而不初始化它

    我想做这样的事情 container iterator it NULL switch eSomeEnum case Container1 it vecContainer1 begin break case Container2 it vec
  • C++ 中的 Ofstream 数组

    我想要在我的项目中使用 41 个输出文件来在其上写入文本 首先创建一个字符串数组list为了命名这些输出文件 然后我尝试定义一个 ofstream 对象数组并使用list命名它们 但我收到此错误 outfile cannot be used
  • 如何检查多个变量是否等于同一值?

    如何比较多个项目 例如 我希望检查所有变量 A B 和 C 是否都等于字符 X 或所有三个变量都等于 O 如果其中 2 个为 X 1 个为 O 则应返回 false I tried if A B C X A B C O Do whateve
  • 通过 boost::python 将 C++ 对象传递给 python 函数

    我想在 C 应用程序中使用嵌入 python 并调用 python 脚本中定义的函数 该函数的参数是一个 C 对象 看我的代码 class Test public void f std cout lt lt sss lt
  • 如何注销多个非当前用户的会员用户?

    我正在使用属于 MVC2 默认项目一部分的 MembershipProvider 我希望能够获取用户名列表 注销用户 并在需要时销毁他们的会话 我能想到的最接近的是 foreach string userName in UserNames

随机推荐

  • 节点立即被杀死 - MacOS

    我一直在尝试调试为什么会发生这种情况以及如何修复它以便我可以工作 问题看起来像这样 node 1 2912 killed node 它发生在yarn and npm所以我假设它node 我找不到任何node提及 var log system
  • 我可以隐藏 HTML5 数字输入的旋转框吗?

    跨浏览器是否有一致的方法来隐藏某些浏览器 例如 Chrome 为数字类型的 HTML 输入呈现的新旋转框 我正在寻找 CSS 或 JavaScript 方法来防止出现向上 向下箭头
  • 无法在 Safari/iOS 中工作?

    我的页面中有这段代码 a href href Press me a 该链接被放置在一个带有有用的 onClick 事件的跨度内 现在 在 Chrome 和 Firefox 中 这可以完美地工作 单击链接 执行有用的事件 每个人都很高兴 在使
  • WinForms Livecharts 图表标题

    我在 WinForms 中使用 LiveCharts 我不使用 WPF 的原因是因为我不想在 WPF 中重写 GUI 所以我想看看是否可以使 LiveCharts 在 WinForms 中工作 我将 LiveCharts 控件作为图像保存到
  • 如何指定我可以在 MacOS 上的 XCode 中使用哪个 GDB

    如何指定我可以在 MacOS 上的 XCode 中使用哪个 GDB 带有完整路径 谢谢 您可以设置PBXGDB路径用户默认为 Xcode 指定不同版本的 GDB 供 Xcode 使用 defaults write com apple Xco
  • Javascript split可以保留分割后的值吗?

    在 JavaScript 中 var myString This is my string console log myString split s 输出 This is my string console log myString spl
  • UI5:使用不同的图标从 JSON 动态构建 ListItems

    我有这个简单的 XML 视图
  • 无法使 Firebase 适用于非 Gradle 构建:缺少 google_app_id。 Firebase 分析已禁用

    我正在开发的应用程序有一个非常定制的构建过程 无法使用 gradle 构建我的应用程序 这并不理想 但我无法改变任何事情 尽管如此 我想在我的应用程序中使用 Firebase Analytics 其中包括模块 firebase core f
  • 如何根据二维数组上的特定位置获取网格单元的状态

    考虑一个二维网格n rows and n columns 此处为 75x75 单击鼠标即可在每个单元格中绘制符号 标记 下面的代码用于在单元格内绘制网格线和符号 class DrawCanvas extends JPanel Overrid
  • java.lang.RuntimeException:更新 Firestore 版本后 Firestore (0.6.6-dev) 中出现内部错误

    更新后我收到以下错误firestore 17 0 1 to firestore 17 0 2 java lang RuntimeException Internal error in Firestore 0 6 6 dev at com g
  • 在ConfigureServices()中调用BuildServiceProvider()的成本和可能的副作用是什么

    有时 在服务注册期间 我需要从 DI 容器解析其他 已注册 服务 对于像 Autofac 或 DryIoc 这样的容器来说 这没什么大不了的 因为您可以在一行上注册服务 然后在下一行上立即解决它 但是使用 Microsoft 的 DI 容器
  • 在 powershell 中打印参数

    我想知道 为什么下面的 powershell 脚本中没有打印字符串参数 function Get Name string Username echo user Username PS C gt Get Name ps1 username t
  • ffmpeg rtmp和本地文件输出

    我在使用 ffmpeg 时遇到了麻烦 我从抓取设备 摄像头 接收 rtsp 流并将其流式传输到 rtmp Youtube Live 我想在我的计算机中拥有该流的副本 因此我同时在本地文件中写入 我使用这个命令 ffmpeg y i RTSP
  • Valgrind 了解堆摘要中分配的字节数增加吗?

    我一直在研究调试分叉 TCP 服务器中的内存使用情况 我认为我做得很好 我只是似乎无法在 堆摘要 中找到有关 分配的字节数 的信息 我的服务器运行的时间越长 这个数字似乎就会不断增加 27526 27526 HEAP SUMMARY 275
  • 代理 HTML 元素

    我想检查一个库对我传递给它的视频元素做了什么 所以我天真地这样做了 cosnt videoElement new Proxy document querySelector video get target key const name ty
  • 嵌套 Flexbox 网格

    我已经构建了一个嵌套的弹性盒网格 将用于各个网关 目前 大概是由于使用outline 每个容器内的内容都会进入 并被隐藏 每个网关周围的空白区域 该空白区域充当每个 div 之间的间距 有没有更好的方法来处理网格间距 这可以让我确保内容不会
  • 仅适用于 Chrome 扩展程序中特定域的后台脚本

    我想知道如何仅针对特定 指定域运行 Chrome 扩展程序的后台脚本 例如 如果扩展程序仅在 Google com 的页面上运行 则没有理由让后台脚本在任何其他域上运行 在我的清单文件中 我设置了 匹配 但我仍然可以看到后台脚本在每个域和选
  • 如何使用PHP进行SQL的GROUP BY?

    我想从数据库表中选择行 并使用 PHP 而不是 SQL 基于参数 在本例中为按项目 对它们进行分组 SQL Clothes table id item owner 1 shoes joe 2 pants joe 3 hat joe 4 pa
  • Xamarin.Android:DrawerLayout.LayoutParams 中的重力参数

    我正在尝试创建一个DrawerLayout以编程方式使用Xamarin Android 但是我在尝试添加时遇到了问题ListView应该可以从左侧拖动 这是我的代码 DrawerLayout myDrawerLayout new Drawe
  • 显式复制构造函数

    我扩展了 std string 以满足我的需要 必须将自定义函数构建到名为的字符串类中自定义字符串 我已经定义了构造函数 class CustomString public std string public explicit Custom