C++ - 构造函数重载 - 私有和公共

2023-12-23

你能告诉我为什么下面的代码给我以下错误 -重载“C(int)”的调用不明确

我认为由于 C(char x) 是私有的,因此只有 C(float) ctor 从外部可见,并且应该通过将 int 转换为 float 来调用它。

但事实并非如此。

class C
{
    C(char  x)
    {
    }
public:
    C(float t)
    {
    }
};

int main()
{
    C p(0);
}

Scott Meyer 在《Effective C++》中对此进行了讨论。这是不明确的原因是他们希望确保仅仅改变成员的可见性不会改变其他地方已经存在的代码的含义。

否则,假设您的 C 类位于标头中的某个位置。如果您有一个私有 C(int) 成员,则您提供的代码将调用 C(float)。如果由于某种原因,C(int) 成员被公开,旧代码会突然调用该成员,即使 C(int) 成员都不是公开的。旧代码,而不是它调用的函数发生了变化.

编辑:更多原因:

更糟糕的是,假设您有以下两个函数:

C A::foo() 
{
    return C(1.0);
}

C B::bar() 
{
    return C(1.0);
}

这两个函数可以调用不同的函数,具体取决于 foo 或 bar 是否被声明为 C 的友元,或者 A 或 B 是否继承自 C。拥有完全相同的代码调用不同的函数是可怕的。

(这可能不如斯科特·迈耶的讨论那么好,但这就是想法。)

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

C++ - 构造函数重载 - 私有和公共 的相关文章

  • MVC Core IActionResult 含义

    什么是IActionResult 我尝试查看 MSDN 和其他网站 但需要通用 常见 易于理解的答案 MSDN IActionResult https learn microsoft com en us dotnet api microso
  • C++ 模板中的名称查找

    我有一些 C 代码 如果没有 fpermissive 选项 就无法再编译 这是我无法分享的专有代码 但我认为我已经能够提取一个简单的测试用例来演示该问题 这是 g 的输出 template eg cpp In instantiation o
  • 如何“杀死”Pthread?

    我正在学习 Pthreads 并且想知道杀死这样一个对象的最佳方法是什么 在寻找类似的问题后 我无法找到 明确 的答案 但请随时向我指出任何相关问题 我正在使用一个小型客户端服务器应用程序 其中服务器主线程正在侦听套接字上的客户端连接 每次
  • 有没有办法使 C90 标准中的枚举无符号? (符合 MISRA-C 2004 标准)

    我正在尝试找到一种使枚举 无符号 的方法 enum x1 0 x2 x3 uint8 t x2 lt PC LINT MISRA C 2004 will complain about mixing signed and unsigned h
  • 返回指向 std::vector 中的对象的 a

    我有一个关于返回对向量元素的引用的非常基本的问题 有一个向量vec存储类的实例Foo 我想访问这个向量中的一个元素 不想使用向量索引 我应该如何编码该方法getFoo here include
  • 正则表达式删除某些字符周围不需要的空格

    我正在尝试从 JavaScript 文件中删除一些不需要的空格 并在将文件发送到客户端之前使用 C 和 Regex 组合文件 我有一个JavascriptHandler处理 js 文件 效果很好 这是我用来 打包 JavaScript 的函
  • Coq:多个构造函数的单一表示法

    是否可以在 Coq 中为多个构造函数定义单一符号 如果构造函数的参数类型不同 则可以从中推断出它们 一个最小的 非 工作示例 Inductive A Set a b c C gt A d D gt A with C Set c1 c2 wi
  • 使用成员作为实现者来实现接口

    我有实现 IA 的 A 类 现在我需要创建也应该实现 IA 的类 B B 类有 A 类的实例作为成员 有什么方法可以定义A的实例实现B类中的IA吗 interfase IA void method1 void method2 void me
  • 替换 JSON 中的转义字符

    我想用空格替换 JSON 字符串中的 字符 我怎样才能做到这一点 我发现从 JSON 字符串中删除所有转义字符的最简单 最好的方法是将字符串传递到正则表达式 Unescape 方法 此方法返回一个没有转义字符的新字符串 甚至删除了 n t
  • 从窗口内容截取屏幕截图(无边框)

    我正在寻找有关如何使用 C 将表单内容保存在位图中的解决方案 我已经尝试过使用 DrawToBitmap 但它捕获了所有带边框的窗口 这就是这段代码的结果 public static Bitmap TakeDialogScreenshot
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • 如何用C++解析复杂的字符串?

    我试图弄清楚如何使用 解析这个字符串sstream 和C 其格式为 string int int 我需要能够将包含 IP 地址的字符串的第一部分分配给 std string 以下是该字符串的示例 std string 127 0 0 1 1
  • C 的“char”使用什么字符集? [复制]

    这个问题在这里已经有答案了 简单的问题 我最近开始用 C 编程 有一个简单的问题 C 编程语言在其 char 类型中使用什么字符集 例如 ASCII 还是取决于软件 操作系统 char 本质上是 1 个字节 主要在所有操作系统上 所以默认情
  • 如何解释“错误C2018:未知字符'0x40'?[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 在编译一些代码时 我收到以下信息 错误 C2018 未知字符 0x40 我想知道如何解决这样的问题 这是我要开始的地方
  • 如何分析 VSCode 中函数的性能

    我用 C Golang 编写了一个程序 如何找到占用最高 CPU 周期的函数 目的是提高正在执行的程序的性能 2021 年 10 月 金香儿哈娜 https github com hyangah宣布 tweet https twitter
  • 使用 roslyn 扩展 C# 语法

    我试图在没有 else 情况的情况下实现 return if return value if 因为我只想在条件有效时返回或返回一个值 我知道 有if condition return or if condition return value
  • 将小数格式化为两位或整数

    对于 10 我想要 10 而不是 10 00 对于 10 11 我想要 10 11 没有代码可以实现吗 即通过指定格式字符串类似于 0 N2 decimal num 10 11M Console WriteLine num ToString
  • 致命错误 C1001:编译器中发生内部错误(编译器文件“msc1.cpp”,第 1325 行)

    当我编译代码时 错误指向以下类 该错误在两行上突出显示 如下所示 tm validFrom tm validUntil struct t SslCertData final struct t Contact TCHAR Organizati
  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对
  • 什么时候使用静态库需要头文件?

    如果我在 Linux 中用 C 创建一个静态库并生成 a 文件 我 或其他人 如何使用该库 例如 我的库定义了一个类 我认为仅仅提供 a 文件是不够的 还需要提供头文件 我如何知道 a 文件必须提供哪些头文件 例如 我是否需要提供我的库代码

随机推荐

  • 使用 jQuery Quicksand 时 CSS 冒泡

    我正在使用 jQuery Quicksand 创建可过滤的文章组合 http davekiss com new http davekiss com new 问题是 当单击侧边栏段落中的过滤器 视频 网站 动态图形 时 正在过滤的文章上的 C
  • 如何在 C# 中处理双重解析中的文化?

    我有一个关于如何在解析双打时处理文化的问题 在系统中 来自不同服务器的价格信息汇集在一起 然而 作为输入给出的数据因文化而异 两百万五十美分如下 2 000 000 50 2 000 000 50 2000000 50 2000000 50
  • Android 4.0如何实现全屏

    Android 4 0 手机只有虚拟按钮 当全屏播放 YouTube 视频时 虚拟按钮实际上是不可见的 视频部分取代了按钮所在的位置 我想做这个 但还没有找到方法 android theme android style Theme NoTi
  • Boost 测试错误:main 已定义

    我有一个Visual Studio我想做一些单元测试的项目Boost Test 我有 2 个文件 File 1 define BOOST TEST MODULE FileX include
  • R Notebook 不显示数据帧的代码输出

    当我尝试查看数据帧结果时 Rnotebook 中的代码块输出没有出现 就好像没有运行一样 我必须通过 pander 函数传递它才能看到输出打印出来 这和针织有关系吗 我提到这一点是因为我在开头将选项设置为以下内容 r setup inclu
  • ReactJS:当子组件调用父组件时,“this.props”不是一个函数

    我已经编写了这段代码 目前正在解决 onClick 事件中的错误 我有两个事件 子元素上的 onClick 事件和顶级父元素上的 onChange 事件 预期的行为应该是更改 Container 组件中当前保存的 activeAccount
  • NServiceBus 到底是一个 ESB

    NServiceBus 到底是 ESB 还是轻量级 ESB 或者它更像是具有持久 可靠消息传递的 WCF 在我看来 它更像是一个消息传递框架 而不是 ESB 只是想要一些指导 因为我刚刚开始研究不同的 ESB 产品以及它们能够做什么或不能做
  • Mercurial 显示“起源”之前的提交数量

    我在这里用 git 术语思考 是否可以看到您在原点之前进行了多少本地提交 就像在 git 中一样 如果您输入git status它会告诉你 Your branch is ahead of blah by blah blah Mercuria
  • android.view.InflateException:二进制 XML 文件行 #1:膨胀类 时出错

    Added ActionBarCompat NavDrawer对于我的项目 在 4 3 设备上运行很顺利 在 2 3 设备上我得到以下异常 09 08 15 09 15 229 E AndroidRuntime 2964 FATAL EXC
  • 单击中间按钮关闭 TabItem

    我有个问题 在我的 WPF 应用程序中 如果我用鼠标中键按下 tabItem 则该 tabItem 应关闭 就像在火狐中一样 但我尝试使用 MVVM 来做到这一点 并且我需要使用命令 我的 tabItems 也是动态创建的 请帮助我 谢谢你
  • 在同一台计算机上开发和使用相同的Python

    我正在开发一个 Python 实用程序模块来帮助进行文件下载 存档等 我在虚拟环境中设置了一个项目以及单元测试 当我想在同一台计算机上使用此模块 本质上是 生产 时 我将文件移动到mymodule目录中的 开发 模块 mymodule 您可
  • webgl 立即模式如何?

    嘿 所以我正在尝试学习 3D 图形 我开始理解即时模式意味着在调用图形时直接绘制图形 例如 html canvas 和保留模式 在 刷新 或交换之前绘制到缓冲区并进行计算缓冲区 但是这几天我一直在学习webgl 我发现它完全缺乏这个线程的东
  • 如何关闭“AmazonS3”对象中的自动代理检测?

    当使用AmazonS3应用程序启动后第一次调用对象时 有大约 14 秒的较大延迟 所有后续调用都不会出现这种大的时间延迟 我之前在其他 HTTP 相关类中遇到过这个确切的延迟问题 这是当相关类尝试确定本地计算机的代理设置以及是否使用它们时引
  • C/C++ Linux,如何在不使用 IP 的情况下查找网络上的邻居(仅限 MAC)

    在小型网络中 比如 20 个或更少的节点 我的程序在测试仪器上需要知道 谁在那里 通过 MAC 而不是通过 IP 我将插入随机网络 并且需要能够执行此操作 而无需知道网络中的任何地址 MAC 或其他内容 并且知道我不能依赖 DHCP DHC
  • 可以获取原始输入中的 Html 节点位置和长度吗?

    考虑以下 HTML 片段 用于空白 我正在使用 Html Agility Pack HAP 来读取 HTML 文件 片段并删除链接 我想做的是找到LINK 以及其他一些 元素 然后用空格替换它们 如下所示 到目前为止 解析部分似乎正在工作
  • 如何使用tensor-flow实现GPU并行?

    我正在写一个使用张量流编辑距离的基于GPU的字符串匹配程序特征 通过了解匹配部分 我将提取详细信息 然后将其存储到数据表中 该数据表最终将保存为 csv 文件 详细信息如下 我有 2 个清单 这较小的列表叫做测试字符串其中包含约9 word
  • 统一调用()函数[重复]

    这个问题在这里已经有答案了 这几乎是我第一次使用 C Sharp 和 Unity 我试图统一使用 invoke 函数 但它给出了错误 尝试调用方法 无法调用 EndGame Restart1 public class EndGame Mon
  • 如何在 React JS 中收到来自 Web 套接字的通知后重新渲染表格组件?

    我使用 React 表并加载一个页面 该页面显示一个包含从 API 获取的数据的表 我还在监听网络套接字 现在 每当通过网络套接字发送某些内容时 我都会打印一条控制台消息 现在 当我收到 Web 套接字上的任何更新时 我想重新加载表 进而进
  • 规则引擎在 Azure 上的流分析中意味着什么?

    我是 Azure 和分析的新手 我正在尝试了解流式警报规则引擎 我使用了一些示例数据作为输入 并有查询来过滤数据 但我不确定什么rules engine意思是 它只是查询还是还有更多的东西 有没有一种方法我们可以将所有规则集中在一个如果是的
  • C++ - 构造函数重载 - 私有和公共

    你能告诉我为什么下面的代码给我以下错误 重载 C int 的调用不明确 我认为由于 C char x 是私有的 因此只有 C float ctor 从外部可见 并且应该通过将 int 转换为 float 来调用它 但事实并非如此 class